You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中能否在typedef内使用匿名类,避免单独定义NoBase类型?

解答

C++ 标准并不支持你示例中ChildT<class {}>的写法,但有两种常用方案可以实现无需单独定义全局NoBase的效果:

方案1:在模板实参内直接定义匿名空类(C++11及以上版本支持)

直接把空类定义写在模板参数的位置即可:

typedef ChildT<struct {}> Child;

注意:该写法每次使用struct {}作为模板实参时都会生成独立的匿名类型,如果你多处使用ChildT<struct {}>,不同位置得到的是不同类型。如果需要全局共享同一个空基类实例,要么把这行typedef统一放在公共头文件中全局引用,要么使用下面的标准库空类型方案。

如果用C++11及以上版本,更推荐用using别名代替typedef,写法更清晰:

using Child = ChildT<struct {}>;

方案2:使用标准库内置空类型(C++20及以上版本支持)

C++20 在<type_traits>中新增了标准空类型std::empty_type,可以直接拿来用,完全不用自己定义空类:

#include <type_traits>
typedef ChildT<std::empty_type> Child;

这种方案的好处是所有引用std::empty_type的位置得到的都是同一个类型,不会出现匿名类型的一致性问题。

如果需要兼容C++03版本,没有更简洁的写法,还是需要单独定义全局的NoBase空类。

内容的提问来源于stack exchange,提问作者P45 Imminent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:00:04