【发布时间】:2017-08-12 17:43:50
【问题描述】:
我的目标是能够仅在标头中创建一个静态变量,该变量将使用我提供的值在.cpp 文件中为我初始化它。它应该看起来像这样:
struct UserDefaults {
STATIC(bool, isFullscreen, true)
STATIC(bool, isBorderless, false)
STATIC(std::string, profileName, "")
}
等于:
// .hpp file
struct UserDefaults {
static bool isFullscreen;
static bool isBorderless;
static std::string profileName;
}
// .cpp file
bool UserDefaults::isFullscreen = true;
bool UserDefaults::isBorderless= false;
std::string UserDefaults::profileName = "";
我查看了How to have static data members in a header-only library?,但无法将 Pesche 的解决方案应用于我的案例。
【问题讨论】:
-
单个宏无法实现这种分离。您需要使用在编译之前运行的预处理脚本来分析源代码并生成此类代码。
-
似乎我听到了一个与几年前类似的话题的讨论,最终结果是决定使用静态成员函数......该函数有一个返回引用的成员变量。 ..模板也可能是一种方法...
-
@RemyLebeau 我知道没有单一的宏解决方案。我尝试使用我发布的问题中的模板以某种方式使用该解决方案,并创建用于初始化、读取和写入的宏。
-
宏只会使混淆代码变得不可调试且不可读。你不能再敲击键盘 20 次吗?