【发布时间】:2013-04-25 16:39:32
【问题描述】:
我有一堂课:
struct C {
int F(int, char) { return 0; }
};
我需要创建一个std::function,它将为变量c调用C::F函数:
C c;
std::function<int(int, char)> f;
...
f = std::bind(&C::F, &c, _1, _2);
但是如果函数的签名改变了,我也需要改变 std::function。
所以我不想重复签名:
C c;
std::function<delete_class<decltype(&C::F)>::type> f;
...
f = std::bind(&C::F, &c, _1, _2);
其中 delete_class 是一些魔术助手,它将类型 int(C::*)(int, char) 更改为 int(int, char)。
我怀疑,我可以在boost::mpl 或boost::function_types 的帮助下实现它,但我做不到。
有经验的可以告诉我怎么做吗?
PS。对比 2010
【问题讨论】:
-
你不能简单地使用
auto f = std::bind(&C::F, &c, _1, _2);吗? -
在实际应用中 f 是结构的成员,所以我不能在那里使用“auto”
标签: c++ templates c++11 bind member-function-pointers