c++ - 我如何解决 boost::signals2 的 slot_type 和 boost::bind 的歧义,为什么它甚至是歧义的?

标签 c++ boost boost-bind ambiguity boost-signals2

考虑这个例子:

#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::bindoperator() 是模板,并且有任意数量的参数(以便能够调用没有参数的函数,因为它有一些)。

如果你提供非重载的方法,一切都会好的

关于c++ - 我如何解决 boost::signals2 的 slot_type 和 boost::bind 的歧义,为什么它甚至是歧义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15944005/

相关文章:

c++ - 支持比较两个对象引用的相等运算符?

c++ - 接收二进制数据并写入(C++套接字编程)

C++/boost : Writing a more powerful sscanf replacement

c++ - 用于提高回调注册可读性的宏

c++ - 在 std::string::find 上使用 boost::bind 编译失败

c++ - 多线程——我需要锁定读取数据吗?

c++ - 制作 boost http 客户端

c++ - 什么是 boost 密集 C++/模板编译的良好 CPU/PC 设置?

c++ - 尝试实例化新对象时出错