クラスがあるとします:
struct CAT
{
//In order to simplify the problem, supposing the possible
// types of member variables are just int,double or string
int a;
double b;
string c;
int d;
....
};
私の場合、各メンバー変数がそのインデックスを使用してアクセスできるように、関数を作成する必要があります。
例えば:
CAT cat;
setValue(cat,0,10);
setValue(cat,1,2.1);
setValue(cat,2,"hello");
setValue(cat,3,123);
//or
int i=1;
setValue(cat,i,2.1)
私の頭に浮かぶ最初のアイデアは、テンプレートを使用することです:
template<typename T>
void setValue(CAT &c, int idx, T value)
{
if (0 == idx){
c.a = value; //compile failure when using setValue(c,2,"hello")
} else if( 1 == idx){
c.b = value;
} else if( 2 == idx){
c.b = value; //compile failure when using setValue(c,0,10)
}
...
}
ただし、コード内のコメントのために機能しません。
それについてのアイデアはありますか?
前もって感謝します。
変更:
複数のテーブルとそのレコードを異なる C 構造体に変換するプログラムを作成する必要があります。たとえば、テーブル CAT、そのスキーマは次のとおりです。
CAT(a,b,c,d,....)
に変換
struct S_CAT //this is generate automatically by code
{
int a;
double b;
string c;
int d;
...
};
//automatically generate some code to write all records of table CAT to struct S_CAT
c構造体を自動生成するコードを生成するのは簡単ですが、レコードを入れるコードを生成するのは難しいです。