我想在模板类中定义一个类型名称,我可以在其他地方使用它来引用类中成员的类型。
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;
};
并像这样使用它:
template <class T>
class CDerived : public CBase<typename T::ElementType1>
{
//...
};
并声明如下对象:
typedef CDerived<CA> MyNewClass;
这不可能吗?我有一些代码可以在 VS2010 下正确编译,但不能在使用该行的 Xcode 下编译:
typedef typename T ElementType1;
显然,编译器期望在 typename 之后有一个限定名称,但我看不出模板类型怎么会有一个。
在这种情况下,我不明白 ElementType1 和 ElementType2 之间的区别。
我查看了许多关于堆栈溢出的问题,但大多数问题似乎只涉及我的示例中的 iterator_type 之类的声明。