3
boost::signals2::signal
과 boost::function
사이의 연결을 재정의해야합니다.C++ 템플릿 매개 변수 공제가 작동하지 않습니다.
template<typename T>
void bind(boost::signals2::signal<T> &signal, boost::function<T> function) {
// override code ...
}
내가 그것을 할 수있는이 bind
의 사용이 간단 만들고 싶어 : 나는 템플릿 함수 다음 만든이를 위해 . 유사한 문제의 게시물에서 읽은 것부터 템플릿 매개 변수를 함수 인수에서 추론해야합니다. 하지만 제 경우에는 명시적인 매개 변수가 없을 때 작동하지 않습니다.
boost::signals2::signal<void()> my_signal;
bind<void()>(my_signal, boost::bind(&A::func, this)); // this works
bind(my_signal, boost::bind(&A::func, this)); // error: no matching function for call
내가 누락 된 것이 있습니까? 명시 적 템플릿 매개 변수를 피할 수있는 해결 방법이 있습니까?
'my_signal'선언은 무엇입니까? – ildjarn
@ildjarn 죄송합니다, 거기에 넣어야합니다. boost :: signals2 :: signal my_signal; –
Maros
변환 전에 템플릿 인수 공제가 발생합니다. 두 번째 호출에는 정확한 일치 항목이 없습니다. Boost :: bind는 두 번째 매개 변수로 변환 될 수있는 것을 제공하지만 템플릿 인수 공제 이후에만 발생할 수 있습니다. 따라서 명시 적 호출이 필요합니다. 또는 두 번째 매개 변수 전체를 템플릿으로 만들 수 있습니다. –