递归类型定义
允许以下行为吗?
typedef Foo<Bar> Bar;
我的编译器抱怨“class Bar”之前有一个声明为“class Bar”。
Is the following allowed?
typedef Foo<Bar> Bar;
My compiler complains that 'class Bar' has a previous declaration as 'class Bar'.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你正在做的事情相当于:
这毫不奇怪是不合法的。
What you are doing is the equivalent of:
which not suprisingly is not legal.
如果 Bar 是作为 Foo 的模板参数的类,则它不能同时是类型定义的
Foo
。您将重新声明 Bar,首先作为独立类,然后作为模板实例化,但甚至
typedef Foo也可以重新声明。如果您已经将 Bar 声明为类,则 Bar;
将不起作用。If Bar is a class as a template parameter for Foo, it can't be the typedefed
Foo<Bar>
at the same time.You would be redeclaring Bar, first as a standalone class and then as a template instantiation, but even
typedef Foo<Whatever> Bar;
wouldn't work if you have already declared Bar as a class.不,这是不允许的。
No it is not allowed.