2011-01-24 8 views
1

私は、次があります。構造体アクセスを一般化するための効率的かつ実践的な方法は?

Struct A { 
    char a; 
    char b[10]; 
    int c; 
    float d; 
} 

Struct B { 
    float d; 
    char b[10]; 
    char a; 
    int c; 
    bool e; 
} 

と私のような要素にアクセスするために構造体AまたはBを受け入れる一般的な機能を作りたい:

void SetD(A a, float f) { a.d = f; } 

があるであろう多くの異なる構造体(最も同じ要素)とそれを操作する多くの機能を備えています。

私はアクセスを一般化しようとしているので、それぞれのメソッドをそれぞれの構造体にコピーして重複したコードにする必要はありません。 instanceofまたはテンプレートがここで最もよくなるかどうかは不明です。どのようにこれをエレガントに実装するためのアイデアですか?もっと明確にすることができるかどうかを教えてください。

答えて

9

方法について:

template< typename T > void setD(T &t, float f) { t.d = f; } 

structキーワードは小文字であること、および構造体は、閉じ括弧の後semicolor ;を必要とすること。

+1

+1。あなたはテンプレートをテンプレート void setD(T&t、const U&f)を使ってさらに一般化することもできます。 – Glen

+1

これをuber-genericにしようとするなら、 'template void setAnything(T&t、UT :: * u、const V&v){t。* u = v; }}しかし、ある時点で、これは愚かになります。 – MSalters