每当我尝试实际使用来自任何地址空间(常量、设备或线程)的引用时,总是会出现相同的错误。这无法编译,并且会产生奇怪的错误:
错误信息为:
唯一的解决方法就是拷贝 `Foo` 而不是尝试使用对它的引用。我从来没有理解过这个奇怪的错误。我还尝试将参数作为 `constant const Foo &` 以及其他尝试和错误。
有人能指导如何实际使用引用吗?
如果我切换到使用指针而不是引用,我会得到类似的错误。 从这个开始:
struct Foo {
int getter() const {
return 1;
}
};
void use_foo(constant Foo& foo) {
int x = foo.getter(); // error here
}
kernel void test_kernel(constant Foo& foo [[buffer(0)]]) {
use_foo(foo);
}
错误信息为:
用任何其他内存地址限定符替换 `constant` ,都是相同的一般性错误。不管是直接传递到内核中的引用还是由函数创建的线程本地引用 - 由于这个错误,我实际上无法以任何方式使用这些引用。它们是否是 const 或非 const 引用也没有关系。无法使用类型为 'const常量 Foo' 的表达式初始化类型为 'const Foo' 的对象参数
唯一的解决方法就是拷贝 `Foo` 而不是尝试使用对它的引用。我从来没有理解过这个奇怪的错误。我还尝试将参数作为 `constant const Foo &` 以及其他尝试和错误。
有人能指导如何实际使用引用吗?
如果我切换到使用指针而不是引用,我会得到类似的错误。 从这个开始:
struct Foo {
int getter() const {
return 1;
}
};
void use_foo(constant const Foo* const foo) {
int x = foo->getter(); // error here
}
kernel void test_kernel(constant Foo* foo [[buffer(0)]]) {
use_foo(foo);
}
类似的尝试在不同地方使用 const
或不使用并没有任何区别。
int getter() const constant
? - jtbandes