【发布时间】:2014-07-14 21:24:52
【问题描述】:
我正在尝试实现一个基本的信号/插槽系统。一切都已启动并正在运行,但我正在努力提高我的实现的可用性。
目前这是连接信号的方式:
struct X
{
void memberFunction(int a, int b)
{
// do something
}
};
void globalStaticFunction(int a, int b)
{
// do something
}
// this is what the signal::connect function looks like at the moment
ConnectionHandle connect(std::function<RetType(Args...)> func);
int main()
{
// test instance
X x;
// example signal
Signal<void(int, int)> mySignal;
// connect a static function to the signal
mySignal.connect(&globalStaticFunction);
// connect a member function
// here we have to use std::bind to get a std::function
mySignal.connect(std::bind(&X::memberFunction, &x, _1, _2));
}
我想为用户提供一种更简单的方法来绑定成员函数。我有这样的想法(类似于 Qt 的做法):
// prefered member function connect
// connect(instance_ptr, function_ptr)
mySignal.connect(&x, &X::memberFunction);
是否可以在不使用 std::bind 的情况下为成员函数获取 std::function 对象?如果没有,是否有一种简单的方法可以只使用成员函数的 instance_ptr 和 function_ptr 生成 std::bind 调用?
【问题讨论】:
-
请参阅stackoverflow.com/questions/21216762/… 了解有关函数部分绑定的一些想法(这基本上是您在这里尝试做的事情)。不幸的是,标准库中没有这样的东西。