Скажите, у меня есть это (застрял с 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;
, я получаю «ошибку: ожидаемый неквалифицированный идентификатор перед шаблоном».
Я прибегаю к использованию #define:
#define FooIterator typename FooMap<T,S>::Iterator
Похоже, это работает (хотя он не работает на Онлайн-компилятор C ++ ).
Хотя это выглядит как хакерство.
Есть идеи?