TypeDef作为可覆盖的类功能

时间:2009-04-14 13:04:19

标签: c++ typedef

如果我有一个包含许多typedef'd变量的类,如下所示:

class X {

typedef token TokenType;

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

};

有没有办法覆盖派生类中typedef的{​​{1}}?

N.B。这不是一个使用模板的好地方(这已经是一个模板化的类,任何更改都可能导致[编辑:无限]递归定义[TokenType等。)。 / p>

3 个答案:

答案 0 :(得分:8)

你可以做的是阴影,但不能覆盖。也就是说:您可以使用自己的TokenType类型定义派生类Y,但只有当某人直接引用Y :: TokenType或通过静态类型为Y的对象时才会发挥作用。任何静态引用X :: TokenType的代码即使是Y型物体也会这样做。

答案 1 :(得分:3)

在编译时解析Typedef - 使它们可覆盖是没有意义的,因为覆盖是 runtime 多态的一个特性。

简单地重新声明typedef会起作用 - 尽管我不确定为什么你认为模板在这里是个坏主意 - 递归模板实际上是可行的。

答案 2 :(得分:0)

简答:不,你不能覆盖typedef。

答案很长:typedef基本上是另一种类型的别名或同义词。他们没有定义新的数据类型。它们只是提供了一种为类型赋予新名称的方法。