我有一个名为 Reciever
的类,它有一个名为 recieve(const Event *)
的函数,其中 Event
继承自 BaseEvent
。我想创建一个绑定(bind)到该类的特定实例。该实例称为 rec
。为此,我使用:
void(Reciever::*func)(const Event *) = &Reciever::recieve;
auto recievePtr = std::bind(func, &rec, std::placeholders::_1);
但是,当我尝试将其存储在一个 vector 中时,我必须指定一个 std::function
将 BaseEvent
作为输入,而不是 事件
,像这样:
std::vector<std::function<void(const BaseEvent*)>>
如何转换 recievePtr
以便将其正确存储在 vector 中?这可能吗?使用指向 BaseEvent
的函数指针的问题是 Reciever
可以有多个 recieve()
方法,不同的派生类都基于 基础事件
最佳答案
您可以尝试以下操作。这在我的机器上编译并运行良好。 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);
关于c++ - 如何将具有派生参数的函数转换为具有基本参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31420406/