2017-04-05 33 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的屬性?

+0

您可以考慮使用模板的別名,而不是一個類型。或者至少繼承向量的構造函數。 –

回答

1

鏘更有助於在這裏:​​

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

事實上,你需要typename消除歧義的依賴型:

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

謝謝!這是一個更有幫助的信息。這爲我解決了它。 –