繁体   English   中英

为什么我不能将类的类型成员作为模板参数传递?

[英]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;

但是,看看你的代码,我想知道你想要的是定义类型而不是对象。 我认为aa2造成非常糟糕的类型名称(所以我的怀疑可能是错误的),但是你走了:

typedef std::array<int, 1> a;
typedef std::array<typename a::value_type, 1> a2;

您现在可以创建这些类型的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM