考慮這個例子:如何解決boost :: signals2的slot_type和boost :: bind的歧義,爲什麼它甚至含糊不清?
#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)
有沒有解決辦法?
我接受了這個解決方案,雖然Mark的解決方案也不錯,但我決定將它用作用戶端的接口('connect'-function)更易於使用,並且重命名成員函數實際上對我的應用程序有幫助,因爲我不得不區分枚舉參數的功能。但馬克也是+1。謝謝你們。 – math 2013-04-15 07:07:12