如何使用模板化类的成员定义模板化的向量?

时间:2019-05-08 11:24:05

标签: c++ c++11 templates

编译以下代码时,编译器(g++-7)发出错误:

#include <vector>

template<typename MetricType, typename DataType>
class Label {
  public:
    using metric_type = Label<MetricType, int>;

    template<typename LabelDataType> using label_type = Label<MetricType, LabelDataType>;
  // ...
};

template<typename LabelType>
class Raptor {
  public:
    std::vector<typename LabelType::metric_type> works;

    std::vector<typename LabelType::label_type<int> > throws_an_error;
};

int main() {
  Raptor<Label<int, int> > raptor;
  return 0;
}

错误消息是

main.cpp:17:53: error: template argument 1 is invalid
     std::vector<typename LabelType::label_type<int> > throws_an_error;
                                                     ^
main.cpp:17:53: error: template argument 2 is invalid
make[2]: *** [CMakeFiles/bin.dir/build.make:63: CMakeFiles/bin.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:73: CMakeFiles/bin.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

我尝试给std::vector一个空结构作为第二个模板参数,但是错误消息保持不变。

我不知道此错误消息的含义以及如何编译此代码。 尤其让我感到困惑,因为字段works不会产生任何错误,而且在注释掉错误的字段时也不会产生任何错误,但是类型metric_typelabel_type<int>是相等的。

0 个答案:

没有答案