我需要以某种方式为我的每个静态库和使用它们的项目定义模块名称。我不能简单地这样做:
std::string const module_name = "my module";
因为我在静态成员初始化期间需要这个值。由于未定义静态数据初始化顺序,module_name
因此在我尝试使用它时,我的变量仍可能未初始化。
为了解决这个问题,我定义了
inline std::string const& module_name()
{
static std::string const name = "my module";
return name;
}
对于每个模块。但这不起作用,因为所有module_name()
调用都被解析为使用父模块的实现(module_name()
总是返回父可执行项目的名称)。我不明白为什么。我希望由于这个内联函数是在静态库中定义和使用的,因此应该捕获实际的模块名称。是因为这个函数没有被编译器内联吗?
有没有推荐的方法来解决这个问题?
编译器:VC++10 和 gcc,在 VC++10 上测试