我正在尝试将泛型连接boost::function<void(void)>
到许多不同签名的 boost::signals2 。我可以使用 boot::lambda::bind 通过将返回值作为绑定参数的一部分传递来执行绑定部分,但是当返回类型为 void 时会出现问题
例子:
template<typename S>
class signal
{
Connection VoidConnect(boost::function<void(void)> callback)
{
//if(boost::is_same<void, typename S::result_type>::value) // Doesn't seem to work
if ( boost::is_void<typename S::result_type>::value ) // Doesn't seem to work
{
//GetSignal returns the actual boost signal
// typename 'S' will be a boost::function with the same signature as the signal
return GetSignal().connect( boost::lambda::bind(callback) );
}
else
{
typename S::result_type f;
return GetSignal().connect( (boost::lambda::bind(callback), f ) );
}
}
}
我不断收到编译错误
error: variable or field ‘f’ declared void
include/boost/function/function_template.hpp:132:42: error: void value not ignored as it ought to be
从错误中可以看出,带有 boost::is_void 的 if 条件(boost::is_same 也不是)似乎不起作用,有人知道为什么吗?有没有更好的方法来做这个绑定?
谢谢,萨克