我正在尝试为C ++项目实现API层,这是我想要实现的一个小例子:
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]'
我们如何实现这一目标?
答案 0 :(得分:2)
假设您无法更改main()
(除了缺少;
的错字)。
您可以添加重载:
template<typename T>
void cpy(T *buf){
for (int i = 0; i != 8; ++i) {
buf[i] = data[i];
}
}
template<typename T, std::size_t N>
void cpy(T (*buf)[N]){
cpy(&buf[0][0]);
}