【发布时间】:2016-06-18 09:25:45
【问题描述】:
对于这个特定项目,我无法使用 C++11 功能(例如 decltype),因为编译器还不支持它们。我需要能够将当前类作为模板参数提供,最好在没有参数的宏中提供(见下文),无需修饰 class 声明或隐藏花括号等。
class Foo: private Bar<Foo> {
MAGIC //expands to using Bar<Foo>::Baz; and some others
public:
void otherFunction();
//... the rest of the class
};
理想情况下,我希望它与 Qt 的 Q_OBJECT 宏非常相似,但不引入另一个预编译步骤和相关的生成类。 typeid 可能在运行时有用,但我的目标是在构建时完成所有这些。
如何编写MAGIC 宏,这样我就不需要每次都重复类名了?
【问题讨论】:
-
这个问题好像是C++03版的“Can I implement an autonomous
selfmember type in C++?” -
介意我把标题改成base clase吗? 封闭类 听起来像是在嵌套以及外部类的类型。
-
self问题看起来确实非常相似,但正如您所指出的,它看起来不像任何提议的解决方案都可以在 C++03 中工作。如果标题更清楚,当然要更改标题。 -
在 C++ 中必须问哪个基类?
-
我的 2 美分是:这可能是不可能的;而不是强装一个不是为它设计的宏系统,要么运行你的代码,例如通过 perl 脚本;或找到使用 C++ 的不同解决方案(例如,使用唯一的 int 作为模板参数,而不是类型名)。
标签: c++ templates c-preprocessor c++03