从模板化类中的模板化类的属性继承

时间:2017-04-05 16:01:05

标签: c++ c++11

我正在尝试执行以下操作:

#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的属性?

1 个答案:

答案 0 :(得分:1)

Clang在这里更有帮助:

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>
//                                    ^^^^^^^^