我想知道它是否存在一种交替使用类和浮点指针的方法。让我们说一个类基本上是一个双精度数组(固定大小)。如果我有类指针,我可以将它用作浮点指针(使用适当的操作符很容易),但是,如果我有指针,我不知道如何自动将它用作类。
让我解释一下我的问题。 我一直在使用Matrix4x4 typedef来保存4x4矩阵:
typedef float Matrix4x4[16];
我有很多功能将Matrix4x4
作为float*
现在我尝试使用基本类,就像我以前使用Matrix4x4一样:
class Matrix4x4 {
float matrix[16];
public:
Matrix4x4();
float operator[](int i){
return matrix[i];
}
operator float*() const{ // I can pass to functions that take a float*
return (float*) matrix;
}
};
当我需要调用类似这样的函数时,问题仍然存在:
bool test(void){
float H[16];
// ... process H
return isIdentidy( H); // I want the compiler to accept it this way
return isIdentidy((float*) H); // or this way
}
bool isIdentity(const Matrix4x4 matrix){
... (process)
return ...;
}
最后,指针应该是一样的吗?
(如果我将H声明为Matrix4x4 H
而不是float H[16]
有没有办法在不必使用static_cast或dynamic_cast的情况下完成此任务?
非常感谢
答案 0 :(得分:1)
没有办法做你想做的事,但你可以做一些非常相似的事。
首先为Matrix4x4创建一个接受float [16]参数
的新构造函数class Matrix4x4 {
float matrix[16];
public:
Matrix4x4();
Matrix4x4(float values[16])
{
memcpy(matrix, values, sizeof(float)*16);
}
float operator[](int i){
return matrix[i];
}
operator float*() const{
return (float*) matrix;
}
};
然后你可以做
bool test(void){
float H[16];
// ... process H
return isIdentidy(Matrix4x4(H));
}
bool isIdentity(const Matrix4x4 matrix){
... (process)
return ...;
}
但新的Matrix4x4的任何更改都将丢失。