使用std :: function进行回调

时间:2016-04-06 20:03:25

标签: c++ c++11

我收到std :: function回调的编译错误。这是类声明:

class Cloud
{
// ...
public:
    Cloud (std::string end_point) : end_point(end_point) {}
    void operator() (std::function<void(rapidjson::Document)> callback);
};

我将回调存储在私有变量中,然后在类的函数中,我试图像这样调用回调:

rapidjson::Document document;
this->callback(document);

此代码给出了错误:

/Users/petilodie/Projects/TheGame/client/Classes/Cloud.cpp:67:20: Calling a private constructor of class 'rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>, rapidjson::CrtAllocator>'

我是C ++的新手,我确信我在这里做错了。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

在C ++ 11之前,禁用外部世界功能的唯一方法是将其标记为private。在这种情况下,他们将rapidjson::Document私有的复制构造函数作为说“此对象不可复制”的方式。

要解决此问题,您的回调应该通过引用获取文档:

void operator() (std::function<void(rapidjson::Document&)> callback);