c++ - 如何将具有派生参数的函数转换为具有基本参数的函数?

标签 c++ c++11

我有一个名为 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::functionBaseEvent 作为输入,而不是 事件,像这样:

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/

相关文章:

c++ - 初始化在这里重要吗?

c++ - 如何通过 boost::asio 和 shared_ptr 创建串口

c++ - 将 lambda 函数指定为默认参数

multithreading - C++0x 线程和套接字

c++ - 使用 C++ 编译器设置 MATLAB

c++ - 使用 boost strand 和 std::mutex

c++ - 在 Fortran 程序中使用 Boost 图形库 (BGL)

c++ - 我可以在任何想使用简单指针的地方使用 shared_ptr 吗?

c++ - 安全地将 int 转换为枚举

c++ - 在非静态成员函数中使用 C++11 lambda 并调用同一类的静态成员函数