9

次のクラスがあるとします。

template <class T>
class Base {
  protected:
    T theT;
    // ...
};

class Derived : protected Base <int>, protected Base <float> {
  protected:
    // ...
    using theInt = Base<int>::theT;     // How do I accomplish this??
    using theFloat = Base<float>::theT; // How do I accomplish this??
};

Base::theT私の派生クラスでは、派生クラスでより意味のある、より直感的な名前を使用することを参照したいと思います。私はGCC4.7を使用しています。これは、C++11の機能をかなりカバーしています。using上記の例で試したこの種の方法を実現するためにステートメントを使用する方法はありますか?C ++ 11では、usingキーワードを使用してタイプをエイリアスすることができます。保護された基本クラスのメンバーをパブリックスコープに入れます。メンバーをエイリアシングするための同様のメカニズムはありますか?

4

1 に答える 1

8

Xeoのヒントは機能しました。C ++ 11を使用している場合は、次のようにエイリアスを宣言できます。

int   &theInt   = Base<int>::theT;
float &theFloat = Base<float>::theT;

C ++ 11をお持ちでない場合は、コンストラクターで初期化することもできると思います。

int   &theInt;
float &theFloat;
// ...
Derived() : theInt(Base<int>::theT), theFloat(Base<float>::theT) {
  theInt = // some default
  theFloat = // some default
}

編集:少し厄介なのは、コンストラクターの本体(つまり中括弧内)まで、これらのエイリアスメンバーの値を初期化できないことです。

于 2012-12-09T05:07:50.613 に答える