Он не может вывести аргумент шаблона для S
и P
, однако, поскольку вы явно вызываете метод с аргументами, вы пропускаете дедукцию, и поэтому компилятор просто говорит вам, что не может найти это конкретное соответствие.
Наиболее вероятная причина, по которой он не может его найти, заключается в том, что S или P являются шаблонами, а не фактическими типами. Если это так, то вам нужно указать это, добавив перед ними typename
. Попробуйте вместо этого:
P *temp_pol = var::findPolicy<typename S, typename P>(policies, s);
Также обратите внимание, что следующее, вероятно, было опечаткой:
template <class S> template <class P>
void Policy<S>::updateOptimal(boost::ptr_vector<P> &policies)
вероятно должно быть:
template <class S, class P>
void Policy<S>::updateOptimal(boost::ptr_vector<P> &policies)
Редактировать: Также заметил странное использование предыдущего параметра, который вы указываете в своей функции P
, но передаёте в нее boost::ptr_vector<P>&
, и, очевидно, ваши аргументы шаблона и параметры функции не совпадают закажите, как у вас есть <S, P>
, затем передайте их как (policies, s)
. Старайтесь не вводить в заблуждение или вводить в заблуждение подобный код.
Я предполагаю, что вы не написали это, потому что у вас нет конкретного вопроса, поэтому он также может попасть под сомнение, не используйте то, что вы не понимаете. Вероятно, есть и другие проблемы, которые еще не были обнаружены, и вам лучше вернуться к чертежной доске и придумать дизайн, который работает для вас.