有时候会遇到这样的函数:
void func(float m[3][3]) { }
而你手头上有个数据:
float data[9];
直接用函数调用,会提示类型转换错误,那么怎么传进去?
传统方法1,生成一个二维数组指针:
float* p[3] = ( data, data + 3, data + 6 }; func(p);
另外一种方法,比较绕:
typedef float mat3[3][3]; // 声明一个3x3数组类型 func(*reinterpret_cast<mat3*>(data));
解释:
把 data 转换成 mat3* 类型的指针,再取值。直接 mat3(data) 同样提示类型转换失败。
另外的写法是:
func(*reinterpret_cast<float(*)[3][3]>(data);
vc、bcc32、gcc 测试通过。
sdragonx https://github.com/sdragonx