调用以std::function作为参数的函数

Calling a function that takes std::function as an argument

本文关键字:参数 函数 function std 调用      更新时间:2023-10-16

我有下面实现回调的代码。我希望回调函数接受一些参数,但只能让它在没有参数的情况下编译。

#include <iostream>
#include <string>
#include <functional>
template<typename TDeserialisable>
class Images;
class Analyze;
class X
{
    void operator()(...) {}
};
/** Interface for serialising/deserialising types defined by TDeserialisable */
template<typename TDeserialisable>
class IDeserialisable
{
public:
    virtual void deserialise(std::function<void()> callback) = 0;
    virtual void deserialise(std::function<void(IDeserialisable<TDeserialisable>&)> callback) = 0;
};
class Analyze
{
public:
    void operator()()
    {
        // deserialise
    }
    void operator()(Images<Analyze>& images)
    {
        // deserialise
    }
};
template<typename TDeserialisable>
class Images : public IDeserialisable<TDeserialisable>
{
private:
    virtual void deserialise(std::function<void()> callback)
    {
        callback();
    }
    virtual void deserialise(std::function<void(IDeserialisable<TDeserialisable>&)> callback)
    {
        callback(*this);
    }
};
int main()
{
    Analyze a;
    Images<Analyze> images;
    // calls the first overload
    static_cast<IDeserialisable<Analyze>&>(images).deserialise(a);
    // how do I call the second overload of deserialise?
    return 0;
}

如何调用反序列化的第二次重载?

需要将输入参数类型指定为std::function template类型的函数参数。比如:

std::function<void(Analyze&, Images<Analyze>&)> mf_p = Analyze::operator();