Я новичок в std::function
и использую его для тривиальных задач.Один из моих проектов передает std::string
в std::function()
- но теперь я бы хотел вместо него передать rapidjson::Document
.
Почему std::string
бесперебойно работает, а rapidjson::Document
- нет?Это потому, что объект документа расположен в стеке, а не в куче?Должен ли я обернуть это в умный указатель?
Я изо всех сил пытаюсь понять саму ошибку и надеюсь, что кто-то может объяснить, что это значит: call of an object of a class type without appropriate operator() or conversion function to pointer-to-function type
Вот мой существующий код:
std::function<void(const std::string&)> callback_;
...
bool set_callback(std::function<void(const std::string&)>&& callback) {
callback_ = callback;
}
void some_event() {
std::string serialize = serializer.to_string(an_object);
callback_(data);
}
...
// The callback event
void the_callback(const std::string& data) {
std::cout << data << std::endl;
}
Обратный вызовтеперь возьмет объектный документ, и сериализация будет полностью выполнена в другом классе.Поэтому я хотел бы, чтобы мой std::function
отразил это:
std::function<void(rapidjson::Document&)> callback_;
...
void some_event() {
rapidjson::Document document = serializer.get_document();
// This is where the error occurs
callback_(document);
}