使用模板化类的成员类型作为类成员变量的类型
Using a member type of templated class as the type of a class member variable
为什么以下内容无法编译(MSVC10 - 但我怀疑它C++无效(,是否有解决方法?
template <typename M>
struct MyClass
{
typedef std::vector<M>::iterator iteratorT;
iteratorT myIterator;
};
错误error C2146: syntax error : missing ';' before identifier 'iteratorT'
。我尝试了一堆变体,结果相同:您可以将std::vector<M>::iterator
用作成员函数中的类型,但不能用作成员变量的类型。
这是
typename
的情况。简短的回答,您需要这样做:
typedef typename std::vector< M >::iterator iteratorT;
长答案,编译器不知道std::vector< M >::iterator
解析为什么M
可以是任何东西,并且可能有专门的std::vector
。具体来说,它无法判断std::vector< M >::iterator
是类型还是值,并且它认为它是一个值。您必须通过插入 typename
来显式告诉编译器它是一种类型。
相关文章:
- 根据模板类型选择类模板的成员类型?
- 函数模板签名中忽略的成员类型def 的访问说明符
- 在C++如何从数组中提取成员并返回成员类型的数组?
- C++从成员类型中扣除类型的功能模板?
- 无法初始化以 std::byte 作为成员类型的位字段
- 构造函数可以更改默认成员类型吗?
- 使用相同方法但不同成员类型构建类的最佳方法
- 允许通过指向方法的成员参数的指针来推断模板参数所指向的成员类型
- 使用 std::条件根据模板参数选择成员类型
- CRTP:如何推断要用作返回类型的成员类型?
- 对成员类型的成员方法使用 std::result_of<>
- C :可以从类及其受保护的成员类型继承可以继承吗?
- 如何在不指定不必要的模板参数的情况下使用模板类的成员类型
- 基类数据成员类型取决于派生类
- C 多态性:允许模棱两可的成员类型
- 使用使用成员类型别名的构造函数来推论类模板参数
- 获取与在模板参数中传递的函数成员类型相同的类
- 如果静态成员未初始化并且成员类型是类本身,该怎么办?
- boost::bind 无法绑定到纯虚拟基类中定义的非静态函数模板成员类型
- 将联合强制转换为其成员类型之一