2017-05-02 3 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 인라인을 할 수 있지만,이 지저분합니다.