【发布时间】:2013-08-11 14:53:15
【问题描述】:
假设我有 2 个班级:
class A {}
class B : public A {}
我想使用std::function 接收 A 类型的任何内容,但分配给它接收从 A 继承的类的方法(如 B)。
void myFun(B bbbb) {}
std::function<void(A)> blah = std::bind(myFun, _1);
这显然行不通,因为编译器不会隐式地向下转换。
但是我怎么能做这样的事情呢?基本上,我想保存一些基本 std::function 类型的映射,并且在每个映射值中,它将一个 std::function 保存到像 B 这样的派生类型。
有没有办法将强制转换运算符绑定到占位符?
【问题讨论】:
-
由于并非所有
As 都保证为Bs,因此这是不安全的。 -
@Dave 没错,但我们假设映射是正确的,它总是会得到正确的类型。
-
如果是这样,你为什么不能让
std::function采用B类型?如果它比这更复杂,也许你应该模板它? -
(显然,如果你真的想破解它,只需让函数接受
A并转换它) -
使用引用或指针,例如
std::function<void(A const&)> blah = std::bind(myFun, _1);。多态性通过两者起作用。
标签: function c++11 bind std-function