Вывод параметров шаблона C++ не работает
Мне нужно переопределить связь между boost::signals2::signal
а также boost::function
, Для этого я создал следующую функцию шаблона:
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
Я что-то пропустил?
Может ли быть обходной путь, чтобы избежать явного параметра шаблона?
1 ответ
Второй тип аргумента не std::function<T>
, но некоторый тип связывания, поэтому компилятор не может вывести T
для второго параметра функции. Вы должны сказать компилятору "Вы в порядке, не найдя тип для T
во втором параметре функции ". Это можно сделать, сделав второй параметр не выведенным контекстом.
template<typename T>
void bind(boost::signals2::signal<T> &signal,
typename std::common_type<boost::function<T>>::type function) {
// override code ...
}