2017-04-05 2 views
1

내에서 템플릿 클래스의 속성에서 상속 :나는 다음을 수행하려고 해요 템플릿 클래스

#include <memory> 
#include <vector> 

template<typename T> 
class Base 
{ 
public: 
    using SharedPtr = std::shared_ptr<Base<T>>; 
}; 

template<typename T> 
class BaseVector : public std::vector<Base<T>::SharedPtr> 
{}; 

int main(int argc, char* argv[]) 
{ 
    BaseVector<int> v; 
    return 0; 
} 

그러나 나는 다음과 같은 오류 얻을 : 나는 컴파일러는 않기 때문이다 수집

$ g++ -std=c++11 -o template template.cpp 
template.cpp:12:57: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, class _Alloc> class std::vector’ 
class BaseVector : public std::vector<Base<T>::SharedPtr> 
template.cpp:12:57: note: expected a type, got ‘Base<T>::SharedPtr’ 
template.cpp:12:57: error: template argument 2 is invalid 

을 Base :: SharedPtr이 타입인지는 모릅니다. BaseVector의 템플릿 인수에서이를 정의하여 Base의 속성에서 상속받을 수 있습니까?

main.cpp:12:39: fatal error: template argument for template type parameter 
          must be a type; did you forget 'typename'?

그리고 실제로, 당신은 의존의 형태 명확하게하기 위해 typename이 필요합니다 :

+0

대신 형식의 템플릿 별칭을 사용하여 고려할 수 있습니다. 또는 적어도 벡터의 생성자를 상속받습니다. –

답변

1

연타 여기에 더 도움이된다

class BaseVector : public std::vector<typename Base<T>::SharedPtr> 
//         ^^^^^^^^ 
+0

고마워요! 그것은 훨씬 더 유용한 메시지입니다. 그것은 나를 위해 그것을 해결합니다. –

관련 문제