TypeDef как переопределяемая функция класса - PullRequest
4 голосов
/ 14 апреля 2009

Если у меня есть класс, который содержит количество typedef 'd переменных, например:

class X {

typedef token TokenType;

bool doStuff()
{
TokenType data;
fillData(&data);
return true;
}

};

Есть ли способ переопределить typedef для TokenType в производном классе?

N.B. Это НЕ подходящее место для использования шаблонов (это уже шаблонный класс, и любые изменения могут привести к [РЕДАКТИРОВАНИЕ: бесконечное ] рекурсивное определение [class X < class Y = class X < class Y . . .> > и т.

Ответы [ 3 ]

8 голосов
/ 14 апреля 2009

То, что вы можете сделать, это тень, но не переопределить. То есть: вы можете определить производный класс Y с его собственными typedefs для TokenType, но это вступит в действие только в том случае, если кто-то ссылается на Y :: TokenType напрямую или через объект, статически типизированный как Y. Любой код, который ссылается на X :: TokenType статически будет делать это даже для объектов типа Y.

3 голосов
/ 14 апреля 2009

Typedefs разрешаются во время компиляции - делать их перезаписываемыми не имеет смысла, так как переопределение является особенностью полиморфизма runtime .

Простое повторное указание typedef будет работать - хотя я не уверен, почему вы думаете, что шаблоны были бы плохой идеей - рекурсивные шаблоны на самом деле осуществимы.

0 голосов
/ 14 апреля 2009

Краткий ответ: нет, вы не можете переопределить typedefs.

Длинный ответ: typedef - это псевдоним или синоним другого типа. Они не определяют новые типы данных. Они просто предоставляют способ дать типу новое имя.

...