2017-05-02 8 views
1

は、これに加えて、私は暗黙的になるようにサブタイプを渡したいと思い、私はタイプに注入し、テンプレートの種類としてこれを使用しているよC++ 11のテンプレートのサブタイプ

を追加しました中古。

実装:

MyClass<MyTestClass> myClass; 

const auto& testDataReturn = myClass.m_typeObject.m_field1; 

// looking to be able to call myClass.m_subTypeObject here which is implicitly typed from the parent type (see template def below) 

テンプレート:

template<class T> 
class MyClass 
{ 
public: 

    T m_typeObject; 
    typename T::SubType m_subTypeObject; // **does not like this** 
}; 

typedef MyType SubType; 

クラス定義:

class SubTypeImpl 
{ 
public: 
    std::string m_field1 = "test1Sub"; 
    std::string m_field2 = "test2Sub"; 
}; 

class MyTestClass 
{ 

public: 
    std::string m_field1 = "test1"; 
    SubTypeImpl SubType; 
}; 
+0

[mcve]のような文脈を提供してください。私はあなたがあなたが尋ねていることを理解しているようなものを見て、やったと思うが、私は確信していない。エラーの原因となる行を(コメント構文を使用して)無効にすることによって、mcveをコンパイル可能にすることができます。コンパイル可能なコンパイル可能なバージョンで他の人がプレイするのは簡単です。擬似コードによる散文やコメントも役立ちます。 – Yunnosch

+0

あなたのMyClassの定義は、少なくともコンパイルされ、妥当に見えます。しかし、私はあなたが実際に達成しようとしていることを知らない。 – rincewind

答えて

1

私は完全に質問を理解していないかもしれないが、あなたが

typedef SubTypeImpl SubType; 

SubTypeImpl SubType; 

を変更した場合、あなたが望むものを達成することができそうです。

2

T::SubTypeそれはメンバーフィールドで、タイプではありません。それは公開されていると仮定すると、TSubType部材の種類を取得

template<class T> 
using SubType = decltype(std::declval<T&>().SubType); 

template<class T> 
class MyClass { 
public: 

    T m_typeObject; 
    SubType<T> m_subTypeObject; 
}; 

あなたはMyClass定義でdecltypeインラインで行うことができますが、それは厄介です。

関連する問題