如何解决 boost::signals2 的slot_type和 boost::bind 的歧义,为什么它甚至模棱两可?
How can I resolve ambiguity of boost::signals2's slot_type and boost::bind, and why is it even ambiguous?
考虑这个例子:
#include <boost/signals2/signal.hpp>
#include <boost/bind.hpp>
typedef boost::signals2::signal< void ( double ) > DoubleSignalType;
typedef boost::signals2::signal< void ( void ) > VoidSignalType;
class B {
public:
void connect( DoubleSignalType::slot_type dbl_slot ) {
dbl_sig.connect( dbl_slot );
}
void connect( VoidSignalType::slot_type void_slot ) {
void_sig.connect( void_slot );
}
private:
DoubleSignalType dbl_sig;
VoidSignalType void_sig;
};
class A {
public:
void foo( double a ) {};
void bar( void ) {};
void other(){
B b;
b.connect( boost::bind( &A::foo, this, _1 ) );
}
};
int main( int argc, char* argv[] ) { return 0; }
当我编译这个时,我得到:
g++ x.cpp
x.cpp: In member function ‘void A::other()’:
x.cpp:27:53: error: call of overloaded ‘connect(boost::_bi::bind_t<void, boost::_mfi::mf1<void, A, double>, boost::_bi::list2<boost::_bi::value<A*>, boost::arg<1> > >)’ is ambiguous
x.cpp:27:53: note: candidates are:
x.cpp:9:10: note: void B::connect(boost::signals2::signal1<void, double, boost::signals2::optional_last_value<void>, int, std::less<int>, boost::function<void(double)>, boost::function<void(const boost::signals2::connection&, double)>, boost::signals2::mutex>::slot_type)
x.cpp:13:10: note: void B::connect(boost::signals2::signal0<void, boost::signals2::optional_last_value<void>, int, std::less<int>, boost::function<void()>, boost::function<void(const boost::signals2::connection&)>, boost::signals2::mutex>::slot_type)
有别的办法吗?
你必须做一些更复杂的事情,因为boost::bind
的operator()
是模板,并且有任意数量的参数(能够调用没有参数的函数,因为它有一些)。
如果你提供非重载的方法,一切都没问题
一个简单的解决方案是显式地创建所需的信号类型。例如:
b.connect( DoubleSignalType::slot_type( boost::bind( &A::foo, this, _1 ) ) );
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 构造对象的歧义
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在boost beast http请求中设置http头
- Boost Spirit,获取迭代器内部语义动作
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 如何解决传递给boost线程的函数中的歧义
- 我是否需要词法分析器来消除关键字的歧义?(boost::精神)
- 如何解决 boost::signals2 的slot_type和 boost::bind 的歧义,为什么它甚至模棱两可?
- boost和xercer XML解析器之间的重载歧义