【发布时间】:2015-05-29 06:30:33
【问题描述】:
如下代码:
template<typename PatternType>
cl_int enqueueFillBuffer(
const Buffer& buffer,
PatternType pattern,
::size_t offset,
::size_t size,
const VECTOR_CLASS<Event>* events = NULL,
Event* event = NULL) const
{
cl_event tmp;
cl_int err = detail::errHandler(
::clEnqueueFillBuffer(
object_,
buffer(),
static_cast<void*>(&pattern),
sizeof(PatternType),
offset,
size,
(events != NULL) ? (cl_uint) events->size() : 0,
(events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
(event != NULL) ? &tmp : NULL),
__ENQUEUE_FILL_BUFFER_ERR);
if (event != NULL && err == CL_SUCCESS)
*event = tmp;
return err;
}
如果数组长度6是静态指定的,则可以编译代码。
queue.enqueueFillBuffer<float[6]>(buffer, nodes, 2345, 123456);
我的问题是如何使长度 6 成为变量并通过编译?由于 C99 支持动态数组,因此 sizeof(float[n]) 可以正确获取大小(对于代码 sizeof(PatternType))。但是我无法使下面的代码通过编译:
int n = 6;
queue.enqueueFillBuffer<float[n]>(buffer, nodes, 2345, 123456);
【问题讨论】:
-
n不是编译时常量,因此编译器无法在编译时推导出静态数组类型。 -
最好将您的代码 sn-p 减少到理解您的问题所需的最低限度。对于您的示例,您可以提供一个空函数。真的够了!
-
是的,编译器不能推导出静态数组,为什么不能通过动态数组的方式处理它。
-
我保留整个代码sn-p,因为它是第三方库头文件,我认为是设计缺陷。
-
AFAIK,C++ 中没有动态数组之类的东西(一些编译器将其作为扩展提供)。
标签: c++ arrays templates dynamic-arrays