如何使用派生参数将函数转换为带有基本参数的函数?

use*_*989 6 c++ c++11

我有一个名为的类Reciever,它有一个名为的函数recieve(const Event *),其中Event继承自BaseEvent.我想创建一个绑定到该类的特定实例.该实例被调用rec.为此,我使用:

void(Reciever::*func)(const Event *) = &Reciever::recieve;
auto recievePtr = std::bind(func, &rec, std::placeholders::_1);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将其存储在向量中时,我必须指定一个std::function将a BaseEvent作为输入而不是a Event,如下所示:

std::vector<std::function<void(const BaseEvent*)>>
Run Code Online (Sandbox Code Playgroud)

我该如何投射,recievePtr以便将其正确存储在矢量中?这甚至可能吗?使用指向a的函数指针的问题BaseEvent是,Reciever可以使用多个recieve()方法,这些方法都具有不同的派生类BaseEvent

Tae*_*ahn 2

您可以尝试以下操作。这在我的机器上编译并运行良好。Visual Studio 目标平台工具集 v120.

Reciever rec;

std::vector<std::function<void(const BaseEvent*)>> vector;

vector.push_back(
    [&rec](const BaseEvent* event)
{
    rec.recieve(static_cast<const Event*>(event));
});

vector.push_back(
    [&rec](const BaseEvent* event)
{
    rec.recieve(static_cast<const EventD*>(event));
});

const BaseEvent* e = new Event();
const BaseEvent* d = new EventD();

vector[0](e);
vector[1](d);
Run Code Online (Sandbox Code Playgroud)