如果我有一个包含许多typedef
'd变量的类,如下所示:
class X {
typedef token TokenType;
bool doStuff()
{
TokenType data;
fillData(&data);
return true;
}
};
有没有办法覆盖派生类中typedef
的{{1}}?
N.B。这不是一个使用模板的好地方(这已经是一个模板化的类,任何更改都可能导致[编辑:无限]递归定义[TokenType
等。)。 / p>
答案 0 :(得分:8)
你可以做的是阴影,但不能覆盖。也就是说:您可以使用自己的TokenType类型定义派生类Y,但只有当某人直接引用Y :: TokenType或通过静态类型为Y的对象时才会发挥作用。任何静态引用X :: TokenType的代码即使是Y型物体也会这样做。
答案 1 :(得分:3)
在编译时解析Typedef - 使它们可覆盖是没有意义的,因为覆盖是 runtime 多态的一个特性。
简单地重新声明typedef会起作用 - 尽管我不确定为什么你认为模板在这里是个坏主意 - 递归模板实际上是可行的。
答案 2 :(得分:0)
简答:不,你不能覆盖typedef。
答案很长:typedef基本上是另一种类型的别名或同义词。他们没有定义新的数据类型。它们只是提供了一种为类型赋予新名称的方法。