1
我正试图保存一些从文件中读取的数据。数据是一个数组,可以是几种类型之一;总之,float等我想这个抽象的数据一类,所以我马上想到:运行时的C++变量类型
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语句然后当我要努力与不同的数据对象我做的:
if (Data<short> *d = dynamic_cast<Data<short> *>(image->data)) {
cout << (*d)(100, 50, 100) << endl;
}
其中图像 - >数据是BaseData
类型。
你对此有何看法?这是关于事情的正确方法吗?理想情况下,我想抓住数组(和类型)并对其进行处理,但我不知道在编译时类型是什么。
只需简单点,通过在'class Data'中声明'T * data',就可以隐藏'class BaseData'中定义的void * data - 永远不会使用void指针。 –
我会推荐[boost :: variant](http://www.boost.org/doc/libs/1_54_0/doc/html/variant.html)。它允许你制作类型安全的工会。 –