c++ - boost::function 静态成员变量

标签 c++ boost

我正在尝试将 boost::function 存储为静态变量,其中“引用?”从函数中获取。

变量看起来像这样:

static boost::function<void( const wchar_t*, const bool)> s_logMessage;

当我尝试编译时出现错误:

error LNK2001: unresolved external symbol "public: static class boost::function Gorbatras_Converter::ConverterApp::s_logMessage" (?s_logMessage@ConverterApp@Gorbatras_Converter@@2V?$function@$$A6AXPB_W_N@Z@boost@@A)

我注意到,如果我不使用该变量,我可以编译它而不会出现该错误(猜测这是编译器优化,因为它未被使用)但是一旦我尝试使用 s_logMessage 变量,我就会收到链接器错误.

我设置 s_logMessage 的方式是这样的:

const int ConverterApp::RunConverter( boost::function<void( const wchar_t* a_message, const bool a_newLine)> a_logMessage )
{
    ConverterApp::s_logMessage = a_logMessage;    
    ...
}

我试过将它设置为非静态成员变量,然后它似乎起作用了。但我需要它作为静态的,否则我也可以将它作为我不想要的参数发送,因为它将有很多功能。

如果你想知道为什么我发送一个日志函数作为参数,那是因为它来自一个单独的程序。

所以我需要帮助的是如何将 boost::function 函数保存在静态变量中?

最佳答案

您缺少静态数据成员的定义(您的类定义中只有该成员的声明)。将以下内容放在命名空间范围内:

boost::function<void( const wchar_t*, const bool)> ConverterApp::s_logMessage;

如果您从不使用数据成员(从技术上讲,如果它不是odr-used,请参阅 C++11 标准的第 3.2 段),则不需要定义 - 因此行为你在观察。

关于c++ - boost::function 静态成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841813/

相关文章:

c++ vector 大小和容量输出相同的值

c++ - 在 darwin 上静态 boost 包括 libstdc++?

c++ - 在 boost python 中使用自定义智能指针

c++ - 使用闭源库 boost 分布式

c++ - 如何在 Boost Dijkstra 中定义自定义距离?

c++ - 返回不同的数据类型而不明确指定数据类型

c++ - glScaled(size/window_size) 不正确的图像

c++ - 如何使用为构造函数指定的大小来初始化 C++ 中的数组?

aes - 这种加密方法安全吗?

c++ - 使用 Boost 的 C++ 中的多线程之谜