Rob*_*ugs 5 c++ templates typedef derived typename
我想在模板类中定义一个类型名称,我可以在其他地方使用它来引用类中成员的类型。
template <class T>
class CA
{
public:
//typedef typename T::iterator iterator_type;
typedef typename T ElementType1; // compile error on this line
//typedef T ElementType2;
T m_element;
};
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
template <class T>
class CDerived : public CBase<typename T::ElementType1>
{
//...
};
Run Code Online (Sandbox Code Playgroud)
并声明如下对象:
typedef CDerived<CA> MyNewClass;
Run Code Online (Sandbox Code Playgroud)
这不可能吗?我有一些代码可以在 VS2010 下正确编译,但不能在使用以下行的 Xcode 下编译:
typedef typename T ElementType1;
Run Code Online (Sandbox Code Playgroud)
显然,编译器期望在 typename 之后有一个限定名称,但我不明白模板类型怎么会有一个限定名称。
我不明白 ElementType1 和 ElementType2 在这种情况下的区别。
我查看了许多有关堆栈溢出的问题,但大多数似乎仅涉及示例中的 iterator_type 之类的声明。
编译器已经知道Tis 是一种类型 ( ),因此在第一种情况下class T不需要限定符。typenameOTOH,编译器事先并不知道这T::ElementType1是一种类型;这取决于 T 最终是什么。
| 归档时间: |
|
| 查看次数: |
7852 次 |
| 最近记录: |