2017-11-14 6 views
0

ためは、私は、今、私は基本クラスとしてテンプレートクラスを持つテンプレートクラスのテンプレートの種類

template<class TKey, class TValue> 
class BaseKeyValueData 
{ ... } 

以下のように宣言をパラメータを追加することができます。また、私は、上記の基本クラスで処理鍵とTValueを置き換えるためにターゲット要素のクラスをdeclara

class BasicElement 
{ 
    BasicElement() = default; 
    BasicElement (const std::string& input) { ... } 
} 

それから私はBaseKeyValueDataから派生クラスを作成し、またBasicElementで処理鍵を交換するが、それでも派生クラスのテンプレート引数としてTValueを残したいです。宣言は以下の通りです

template <class T> 
class DeriveValueClass() : BaseKeyValueData<BasicElement, T> 
{ 
    DeriveValueClass() : BaseKeyValueData<BasicElement, T>() {} 
    ... 
} 

上記のコードは私が実装しています。しかし、新しい要件に応じて、BasicElementインスタンスを初期化するために文字列パラメータを使用したいと考えています。上記のDeriveValueClassクラスでは、デフォルトのコンストラクタはBasicElementのデフォルトのコンストラクタ(パラメータなし)を使用します。では、DeriveValueClassコンストラクタでBasicElementを初期化するためにパラメータを使用する方法を教えてください。以下のようなダミーコード:

DeriveValueClass() : BaseKeyValueData<BasicElement(<parameterForBasicElement>), T>() {} 

上記のコードはC++では無効です。これをどのように実装できますか?

ありがとうございます!

+0

あなたの質問は不明です。重要なコンストラクタは 'BaseKeyValueData 'です。これは 'DeriveValueClass'が継承するものです。 'BasicElement'から継承しないので、それを構築する必要はありません。これは明らかにあなたがコンパイルしようとしている実際のコードではなく、偽のクラス名を使って偽のコードです。残念ながら、偽のコードについて尋ねる唯一のことは偽の回答です。本当の答えが必要な場合は、実際のコンパイルエラーを生成する実際のコードを投稿する必要があります。 –

+0

@SamVarshavchik、実際にあなたのコミットが私の考えを引き起こします。私はそれで答えを見つける。本当にありがとう!私は実際に型宣言とオブジェクトの初期化を混同します。私の質問では、テンプレートクラスの型宣言のコードを記載します。実際には、私は最初の私のcppファイルの型、それは私がコンストラクタのパラメータを転送する必要があると思う場所です。 – newcarcrazy

答えて

0

この質問では、実際に型宣言とインスタンスの初期化が混乱しています。 DeriveValueClass宣言では、コンストラクタに関係なく、型を宣言するだけです。したがって、型インスタンスを作成する場合は、型のコンストラクタを明示的に呼び出す必要があります。これは、インスタンスを初期に別のコンストラクタを使用して検討するための適切な場所である

boost::make_shared<TKey>() 

:私のcppのコードでは、私のような、タイプのインスタンスを作成して明示的に持っています。

関連する問題