我正在尝试实现一种通用设置结构,以便在一处访问我的应用程序的所有设置。该应用程序的每个模块都有自己的设置类/结构。我想在常规设置结构中定义每个模块设置类型的成员。为了使事情变得容易,我想定义一个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++ - C++使用宏定义单个类的类成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42367626/

10-10 04:17