我无法将类的类型成员作为模板参数传递。 例如,在以下代码中:
std::array<int, 1> a;
std::array<typename a::value_type, 1> a2;
不会编译。
这是什么原因?有解决方法吗?
答案 0 :(得分:23)
a
不是类型,因此您无法对其应用::
。您可以使用decltype
来检索a
的类型:
std::array<int, 1> a;
std::array<decltype(a)::value_type, 1> a2;
答案 1 :(得分:1)
昆汀给了你一种方法来解决这个问题。还有两个。
当然,显而易见的解决方案是将对象a
的名称替换为其类型名称:
std::array<typename std::array<int, 1>::value_type, 1> a2;
然而,看看你的代码,我想知道你想要的是定义 types 而不是对象。我认为a
和a2
制作了非常糟糕的类型名称(所以我的怀疑可能是错误的),但是你走了:
typedef std::array<int, 1> a;
typedef std::array<typename a::value_type, 1> a2;
您现在可以创建这些类型的实例。