【发布时间】:2011-07-22 08:07:11
【问题描述】:
如何编写具有可变数量参数的宏来定义函数?假设我们用 2 个参数定义类 class1,用三个参数定义类 class2。
class class1 {
public:
int arg1;
int arg2;
class1(int x1, int x2): arg1(x1), arg2(x2) {}
};
class class2 {
public:
int arg1;
int arg2;
int arg3;
class1(int x1, int x2, int x3): arg1(x1), arg2(x2), arg3(x3) {}
};
对于我定义的每个类,甚至是在我想要编写以下内容之前已经定义的类:
template<> inline void writeInfo<class1>(const class1& obj, FILE* fp) {
writeAmount(2, fp);
writeName("arg1", fp);
writeInfo(obj.arg1, fp);
writeName("arg2", fp);
writeInfo(obj.arg2, fp);
}
template<> inline void writeInfo<class2>(const class2& obj, FILE* fp) {
writeAmount(3, fp);
writeName("arg1", fp);
writeInfo(obj.arg1, fp);
writeName("arg2", fp);
writeInfo(obj.arg2, fp);
writeName("arg3", fp);
writeInfo(obj.arg3, fp);
}
我们不需要关心writeAmount、writeName 或writeInfo 的定义。我想做的是写这样的东西:
MACROWRITEINFO(class1, 2, arg1, arg2);
MACROWRITEINFO(class2, 3, arg1, arg2, arg3);
是否可以创建这样的宏,以便它可以扩展到上述模板定义?我在很多地方都读到宏是邪恶的,但在这种情况下,我相信它们非常有帮助,因为它们会减少我输入的代码量,从而减少我在创建模板函数。
【问题讨论】:
-
您可能想查看 Boost Serialization。这看起来像是在重新发明轮子。
-
您还可以查看 Boost Preprocessor,它应该为您提供创建此类宏的工具。
-
@visitor 和 MSalter,你们谁能给我看一个使用 Boost 预处理器或序列化的例子吗?很抱歉听起来很懒惰而不是用谷歌搜索,但我想看看如何应用它而无需对此进行大量研究。
标签: c++