gpt4 book ai didi

c++ - 如何用 C++ 数组初始化 OpenCL 常量 vector ? [主持人]

转载 作者:行者123 更新时间:2023-11-28 05:57:44 25 4
gpt4 key购买 nike

在我的课上,我有以下声明:

class OCLState {
//Irrelevant stuff involving OpenCL contexts and command queues and so on...
const cl_int16 values;

OCLState(const std::array<int, 16> & _values);
}

所以很自然地,我需要在创建这个对象时初始化 vector 。问题是,我如何将 _values 转换成 values 接受作为初始值设定项的形式?

OCLState::OCLState(const std::array<int, 16> & _values) : values(
{ _values[0], _values[1], _values[2], _values[3] , _values[4] , _values[5] , _values[6], _values[7],
_values[8], _values[9], _values[10], _values[11] , _values[12] , _values[13] , _values[14], _values[15] }
) {
//Irrelevant stuff involving setting up contexts and queues and so forth
}

这是可行的,但它非常繁琐且难以阅读。有没有更好的办法?

编辑:

OCLState::OCLState(const std::array<int, 16> & _values) : values(array_to_vector(_values)) {

}

cl_int16 OCLState::array_to_vector(const std::array<int, 16> & in) {
cl_int16 out;
for (int i = 0; i < 16; i++) out.s[i] = in[i];
return out;
}

这也可行,但我认为它不理想。我正在寻找一种不涉及为我在编写这些程序时可能使用的每个 vector 编写辅助方法的方法。

最佳答案

在不放弃 const-ness 的情况下解决这个问题的一种方法是使用喜欢/讨厌的 reinterpret_cast。您可以按如下方式定义构造函数:

OCLState::OCLState(const std::array<int, 16> &_values) : 
values(*reinterpret_cast<const cl_int16*>(&_values.front())) { }

产生所需的行为:

int main(int argc, char *argv[]) {
OCLState S({0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15});
std::cout << S.values.s[0] << "," << S.values.s[15] << std::endl;
}

打印 > 0, 15

关于c++ - 如何用 C++ 数组初始化 OpenCL 常量 vector ? [主持人],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33833212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com