1
ファイルから最初の4つの整数を読み込み、N、H、C、Wの名前で取得できるようにします。例えば :私は次のコンパイラエラーメッセージが表示されます複数の継承とテンプレートを持つ基本クラスのメンバにアクセス
struct N{ int val; };
struct C{ int val; };
struct H{ int val; };
struct W{ int val; };
struct DataFormat : N, C, H, W
{
template<class T1, class T2, class T3, class T4>
bool read_header(FILE* p_file)
{
int res = 0;
res += fread(&T1::val, sizeof(int), 1, p_file); //doesn't compile
res += fread(&T2::val, sizeof(int), 1, p_file); //doesn't compile
res += fread(&T3::val, sizeof(int), 1, p_file); //doesn't compile
res += fread(&T4::val, sizeof(int), 1, p_file); //doesn't compile
return (res != 0);
}
int getN(){ return N::val; }
int getC(){ return C::val; }
int getH(){ return H::val; }
int getW(){ return W::val; }
};
static void foo(){
DataFormat data_format;
FILE* some_file;
data_format.read_header<N, W, H, C>(some_file);
}
:すべての行にres+=fread...
から始まる//some_file.mat: {10,20,30,40.....} data_format.read_header<N,C,W,H>(some_file.mat); cout << data_format.getN(); // prints the first read integer: 10 cout << data_format.getH(); // prints the fourth read integer: 40 data_format.read_header<C,N,H,W>(some_file.mat); cout << data_format.getN(); // prints the second read integer: 20 cout << data_format.getH(); // prints the fourth read integer: 30
次のコードは、多重継承とテンプレートを使用してこれを達成しようとします
エラーC2664: 'size_t fread(void *、size_t、size_t、FILE )':できません 引数1から 'int N :: 'から' void * '
なぜですか? より洗練されたソリューションのご提案ですか?