0

多数のメンバー変数を持つ構造体があるとします。これらのメンバーのいずれかの値を設定する関数を書きたいと思います(他のいくつかのものと一緒に、しかしそれは質問の範囲を超えていると思います)。これのようなもの(しかし明らかにそうではない):

struct A
{
  A() { /* do stuff */ }
  bool a1;
  bool a2;
  bool a3;
  void set_member(???);
  bool get_member(???);
};

A a;
a.set_member(a1, true);
bool value = a.get_member(a1);

さて、私が最初に考えたのは、一連の名前付き変数の代わりに配列を使用することです。そうしたいのですが、これはできればそのようには触れたくないコードです (レガシーです)。コンストラクターがあるため、POD ではないため、バイナリのシリアライズ特性を維持できるかどうかさえわかりません。たとえそれが POD だったとしても、私はまだ確信が持てずa1、の配列a2a3は異なるアライメントを持つことができますbool

では、元の質問に戻りますが、これを行う方法はありますか? おそらく、私がまだ気付いていないテンプレートのトリックでしょうか?

4

2 に答える 2

7

メンバーへのポインターを使用できます。

void set_member(bool A::*var, bool value)
{
    this->*var = value;
}

A a;
a.set_member(&A::a1, true);

テンプレート化されたバージョンは簡単です:

template<typename T>
void set_member(T A::*var, T value)
{
    this->*var = value;
}

しかし、変数の名前が既にわかっている場合、これを行う理由がわかりません。

于 2013-10-31T21:45:58.367 に答える