ファイルから読み取ったデータを保存しようとしています。データは配列であり、いくつかのタイプのいずれかになります。short、float など。このデータをクラスに抽象化しようとしているので、すぐに次のように考えました。
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;
}
image->data は typeBaseData
です。
これについてどう思いますか?これは物事を進める正しい方法ですか?理想的には、配列 (および型) を取得して処理を行いたいのですが、コンパイル時に型がどうなるかわかりません。