说我有这个(卡在C ++ 03上)。
template <class T,int S>
class FiniteMap
{
public:
class Iterator {};
class Entry {};
};
class Foo {};
template <class T,int S>
class FooMap : public FiniteMap<T,S>
{
public:
void bar()
{
FooMap<T,S>::Iterator iter;
FooMap<T,S>::Entry entry;
}
};
int main()
{
return 0;
}
我想typedef
FooMap<T,S>::Iterator
和FooMap<T,S>::Entry
,但是如果我尝试这样做:
typedef FooMap<T,S>::Iterator FooIterator;
我收到“错误:在此范围内未声明'T'”。如果我尝试在上面放模板参数:
typedef
template <class T,int S>
FooMap<T,S>::Iterator FooIterator;
我收到“错误:“模板”之前存在预期的不合格ID”。
我求助于使用#define:
#define FooIterator typename FooMap<T,S>::Iterator
这似乎可行(尽管不适用于Online C++ Compiler)。
不过似乎有点黑。
有什么想法吗?