C++使用宏定义单个类的类成员

标签 c++ macros

我正在尝试实现一个通用设置结构,以便在一个地方访问我的应用程序的所有设置。应用程序的每个模块都有自己的设置类/结构。我想在常规设置结构中定义一个具有每个模块设置类型的成员。为了让事情变得更简单,我想定义一个 REGISTER 宏,为每个模块设置创建一个新成员。

像这样:

struct Settings
{    
    // I know this is not working
    #define REGISTER_SETTINGS(settings) \
            settings _##settings = ##settings();
};

struct ServerSettings
{
    int port = 8080;
    string ip = "0.0.0.0";
};

REGISTER_SETTINGS(ServerSettings);

struct WindowSettings
{
    int width = 640;
    int height = 480;
    string title = "window";
};

REGISTER_SETTINGS(WindowSettings);

最后我的设置结构应该是这样的:

struct Settings
{   
    ServerSettings _ServerSettings = ServerSettings(); 
    WindowSettings _WindowSettings = WindowSettings();
};

我不知道应该如何在其中进行宏扩展。

最佳答案

你应该避免使用宏。它甚至在我眼中都没有意义 REGISTER_SETTINGS(settings) 因为你是程序员,只需将这两行写入 Settings 结构就可以了...... 但是,如果您仍然想要这样的函数,请使用内联函数来编写它。

关于C++使用宏定义单个类的类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42367626/

相关文章:

具有固定数量线程和线程安全队列的 C++ 多线程

c++ - 使用 C++ 宏检查变量是否存在

c - #定义 PARTS_COLUMN "| %-16s | %-50s |\n"

c++ - 枚举类范围解析运算符

C++宏将字符串转换为字符列表

c++ - 范围枚举 : error: cannot convert ‘int’ to ‘Handle’ in initialization

c++ - 运算符重载的基本规则和惯用法是什么?

c++ - 如何在非常量指针集合中搜索常量指针?

c++ - LLVM中直接跳转的分支指令

c# - 使用 AWK 或 SED 复制行并最终创建方法包装器