継承するコンストラクタはC++のテンプレートで動作しますか0xですか?
C++ 0xでは、次のようにusing
キーワードを使用してコンストラクタを継承できます。
class B { B(int) {} };
class A : public B { using B::B; };
暗黙のうちにA(int)
コンストラクタを宣言します。これはテンプレートで動作しますか?
class B { B(int) {} };
template<class T> class A : public T { using T::T; };
T::T
では、テンプレート引数にスコープ演算子を使うのは普通ですが、右手のT
はコンストラクタであることが分かりますから、コンパイラは左手T
を計算することを期待しています。実際にはあいまいさがあるようです:B
というメソッドがB
というメソッドを持っていて、A
にオーバーロードを追加しようとしているのですが(これはコンパイラがpre-C++ 0xのような宣言を解釈する方法です)?
いいえによって使われたテンプレートのインスタンス化。たとえば、 'A'は 'int :: int;'を使用します:警告の言葉:STLコンテナのような基本クラスではない型の場合はどうなりますか? –
AJG85
あなたはメンバー変数の質問で正しいです。 STLコンテナの継承に関しては動作しますが、多態性の型で型を使用する場合は危険です。しかし、単純にD>を作成し、それを1か所のように使用すると、うまくいきます。それは良い習慣ではありませんが、機能するでしょう。 –
正しいですが、派生オブジェクトに状態を追加するか、ベースクラスポインタを使用すると、後で問題の継承と根本原因が多少わかりにくくテンプレートとして導入される可能性があります。 – AJG85