我試着去創建這樣與普通基類通用對象爲std ::功能
class MessageConsumer {};
class MessageHandler {
public:
static int Connect(int, MessageConsumer* obj, std::function<void(MessageConsumer&)> handler) {
// Add callback to handler
}
};
class A : public MessageConsumer {
public:
void handleIt(void) {
// Do stuff
}
};
int main(void) {
A a;
MessageHandler::Connect(1, &a, &A::handleIt);
return 0;
}
Qt的啓發接口的信號處理類,但不斷收到編譯器錯誤
main.cpp中:在函數「int main()」: main.cpp:71:46:錯誤:無匹配函數MessageHandler :: Connect(int,A *,void(A :: )())「 MessageHandler :: Connect 1,& a,& A :: handleIt); ^ main.cpp:53:5:anm:candidate:static int MessageHandler :: Connect(int,MessageConsumer,std :: function) int MessageHandler :: Connect(int,MessageConsumer * obj,std :: function handler ){ ^ ~~~~~~~~~~~~~ main.cpp:53:5:anm:參數3從「void(A :: *)()」到「std: :函數」
有沒有解決這個錯誤沒有定義模板的方式,我不想在界面中使用的模板,即
MessageHandler::Connect<A>(1, &a, &A::handleIt)
* 「我不想在界面中使用模板」 * - 爲什麼不呢? –
如何使用['std :: bind'](http://en.cppreference.com/w/cpp/utility/functional/bind)? –
唯一的原因是我希望它看起來儘可能多Qt儘可能 – Johan