C++ コード (DLL に埋め込む) の 2 次元配列に数メガバイトのデータを配置する必要があり、サブクラスごとに異なるデータセットを使用する必要があります。指定したサブクラスの定数にアクセスするための仮想アクセサー メソッドを定義しましたが、2D 配列ではなく、プリミティブと 1D 配列に対してのみ機能します。
#include <stdio.h>
class SubClassHoldingData { // inheritance removed for short,compilable example
public:
static int const notWorkingData[2][2];
virtual int const** getNotWorkingData() { return (int const**)notWorkingData; }
};
// simplified data set, about 200x200 in real application
const int SubClassHoldingData::notWorkingData[2][2] = { { 1 , 2 } , { 3, 4 } };
int main( int argc , char** argv ) {
SubClassHoldingData* holder = new SubClassHoldingData();
const int** data = holder->getNotWorkingData();
printf("data: %d" , data[1][1]); // !!! CRASHES APPLICATION !!!
}
データに動的に(仮想的に)アクセスしたいのですが、次のようなコンパイル時の定数配列を使用します。
DataHolder* holder = new FirstDataSetHolder();
const int** data = holder->get2DArray();
DataHolder* holder = new SecondDataSetHolder();
const int** data = holder->get2DArray();
// "data" contents DIFFERENT now, but compile-time constants!
それを達成する方法は?