Что касается кода ниже:Могу ли я использовать динамический массив как имя шаблона C++?
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;
}
Код может быть скомпилированного, если длина массива, , является статическим обозначена.
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' не является постоянной времени компиляции, поэтому компилятор не может выводить статический тип массива во время компиляции. –
Было бы неплохо сократить фрагмент кода до минимума, необходимого для понимания вашего вопроса. Для вашего примера вы можете предоставить пустую функцию. Это действительно так! – Klaus
Да, компилятор не может вывести статический массив, но почему он не может распоряжаться им путем динамического массива. –