c++ - 向类 : using macro function into header file 添加动态方法

标签 c++ macros

尽量避免写重复的代码;我使用宏将方法删除到一个类中。 我想在头文件中定义一个宏函数,例如:

破解器.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/

相关文章:

clojure - 定义 Clojure 宏的同义词

检查 int 是否被定义为宏。 C

c++ - 参数有几行的宏​​函数?

c++ - 使用 char 二进制会带来意想不到的结果

c++ - 表达式:双端队列迭代器不可取消引用

c++ - COM(C++) 编程教程?

c++ - 从一系列值中找到最近边界的最快方法

c++ - 比较c++宏的输入参数

macros - 创建除某些特定变量之外的所有变量的列表

c++ - OpenCV 相机初始化失败