尽量避免写重复的代码;我使用宏将方法删除到一个类中。
我想在头文件中定义一个宏函数,例如:
破解器.h
#include<message.h>
class Cracker {
#define DECLARE_MSG(MSG_NAME, MSG_TYPE,ALREADY_DEFINED) \
{ \
if(!ALREADY_DEFINED)
{ \
virtual bool cbProcessMsg_##MSG_NAME (API::MSG_NAME##Msg const & msg); \
}\
#include "message.h"
#undef DECLARE_MSG
};
消息.h
DECLARE_MSG(AddOrder , 'A', false);
DECLARE_MSG(DeleteOrder , 'B', true);
DECLARE_MSG(ReplaceOrder , 'C', false);
...
但这段代码确实无法编译,因为我无权在函数外添加 if 语句。
有没有其他方法可以做到这一点?
最佳答案
有几个项目值得强调:
1. 宏不知道作用域;删除它的定义的唯一方法是取消定义它。
2。 宏按原样粘贴到代码中;然后编译。宏本身不是函数,它是代码生成工具。这意味着即使“ALREADY_DEFINED”为真,您也会得到另一个定义。
3。 您要做的是在类定义之外的类中添加一个函数。你就是不能这样做。曾经。
4. Header guards 将为您减轻大中型项目的痛苦;您应该尽早养成使用它们的习惯。
虽然不完全相同,但看起来您想做的是查找工厂模式是什么。
关于c++ - 向类 : using macro function into header file 添加动态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509542/