我正在尝试存储从文件中读取的一些数据。数据是一个数组,可以是几种类型之一;短,浮动等。我正在尝试将这些数据抽象到一个类中,所以我立即想到:
class BaseData {
public:
void *data;
virtual void foo() = 0;
};
template <typename T>
class Data : public BaseData {
public:
T *data;
Data(const File *file) {
data = (T*) file->data;
}
T operator()(int x, int y, int z) {
return data[x + y*yd + z*zd];
}
void foo() {}
};
我在读取文件时使用 switch 语句来实例化正确的对象,然后当我想使用不同的 Data 对象时:
if (Data<short> *d = dynamic_cast<Data<short> *>(image->data)) {
cout << (*d)(100, 50, 100) << endl;
}
其中 image->data 的类型为BaseData
。
您对此有何看法?这是做事的正确方式吗?理想情况下,我想获取数组(和类型)并用它做一些事情,但我不知道编译时类型会是什么。