递归类型定义

发布于 2024-09-04 05:43:56 字数 116 浏览 4 评论 0原文

允许以下行为吗?

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

回忆那么伤 2024-09-11 05:43:56

你正在做的事情相当于:

struct A {};
struct B {};
typedef A B;

这毫不奇怪是不合法的。

What you are doing is the equivalent of:

struct A {};
struct B {};
typedef A B;

which not suprisingly is not legal.

并安 2024-09-11 05:43:56

如果 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.

躲猫猫 2024-09-11 05:43:56

不,这是不允许的。

No it is not allowed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文