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