我正在尝试实现一种通用设置结构,以便在一处访问我的应用程序的所有设置。该应用程序的每个模块都有自己的设置类/结构。我想在常规设置结构中定义每个模块设置类型的成员。为了使事情变得容易,我想定义一个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/