Я пытаюсь реализовать уровень API для проекта C ++, вот небольшой пример того, чего я хочу достичь:
double data[8] = {0,1,2,3,4,5,6,7};
template<typename T>
void cpy(T *buf){
for(int i=0; i<8; i++)
buf[i] = (T)data[i];
}
int main() {
int a[8];
cpy(a);
float b[8];
cpy(b);
double c[2][4];
cpy(c); //error: functional cast to array type 'double [4]'
return 0;
}
Идея состоит в том, чтобы позволить пользователю использовать функцию cpy()
для различных типов массивов без необходимости делать cpy<double>(c)
или cpy((double *)c)
, но в этом примере вызов cpy()
с двумерным массивом приводит к ошибке компиляции :
error: expected initializer before 'cpy'
In instantiation of 'void cpy(T*) [with T = double [4]]':
required from here
error: functional cast to array type 'double [4]'
Как мы можем этого достичь?