[英]Why can't I pass a type member of a class as a template parameter?
我无法将类的类型成员作为模板参数传递。 例如,在以下代码中:
std::array<int, 1> a;
std::array<typename a::value_type, 1> a2;
不会编译。
这是什么原因? 有解决方法吗?
a
不是类型,因此你不能将::
应用于它。 你可以使用decltype
来检索a
类型:
std::array<int, 1> a;
std::array<decltype(a)::value_type, 1> a2;
昆汀给了你一个解决这个问题的方法。 还有两个。
当然,显而易见的解决方案是将对象a
的名称替换为其类型的名称:
std::array<typename std::array<int, 1>::value_type, 1> a2;
但是,看看你的代码,我想知道你想要的是定义类型而不是对象。 我认为a
和a2
造成非常糟糕的类型名称(所以我的怀疑可能是错误的),但是你走了:
typedef std::array<int, 1> a;
typedef std::array<typename a::value_type, 1> a2;
您现在可以创建这些类型的实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.