template<typename T>
Ref<Iterator<T> > GetFilterIterator(Ref<Iterator<T> > i, boost::function<bool(T)> pred) {
return new FilterIterator<T>(i, pred);
}
Ref<Iterator<CWorm*> > x = GetFilterIterator(worms(), &CWorm::getLocal);
И worms()
возвращает Ref<Iterator<CWorm*> Ref>
и есть bool CWorm::getLocal();
(который является функцией-членом). И:Вывод аргумента шаблона аргумента C++. Зачем?
template<typename T> struct Ref {
// ...
};
template<typename T> struct Iterator {
// ...
};
Это не вывести аргумент шаблона:
Iter.h: 272: 27: Примечание: кандидат шаблон игнорируется: не удалось аргумент шаблона дедукции [3]
Почему?
Если я вызываю его с указанным аргументом шаблона, то есть GetFilterIterator<CWorm*>(worms(), &CWorm::getLocal)
, он не жалуется. Интересно, почему он не может вывести аргумент шаблона следующим образом. И могу ли я сделать это как-то так, чтобы он мог автоматически выводить тип?
какой тип 'Итератор :: Ref'? –
sth
[Связанный?] (Http://stackoverflow.com/questions/6677072/overload-resolution-failure-when-streaming-object-via-implicit-conversion-to-str) –
'bool CWorm :: getLocal(); 'не может соответствовать' boost :: function ', потому что он не принимает аргумент. –