Название: Проблема с шаблонами Отправлено: Rotten_c от Сентябрь 02, 2012, 19:36 Есть шаблон
Код: template <class T, class U> // Т потомок U Инстанцированные GameObjMemCell укладываются в std::list для работы с которыми есть шаблонная функция Код: template <class T, class U> error C2064: term does not evaluate to a function taking 2 arguments Лог построения тут: http://pastebin.com/PrCQ6uK9 код который вызывает ошибку Код: template<class _Pr, class _Ty1, class _Ty2> inline для упорядочивания задается предикат: Код: template <class T, class U> Если я убираю сортировку Код: ObjGiver.sort(Sorter); Название: Re: Проблема с шаблонами Отправлено: sergey_ulyanov от Сентябрь 03, 2012, 08:54 Посмотрите на объявление std::binary_function: там присутствуют только определения синонимов для аргументов и результата, но нет определения никакого operator, который требуется для выполнения сравнения элементов списка при сортировке.
Название: Re: Проблема с шаблонами Отправлено: Igors от Сентябрь 03, 2012, 09:12 Я понимаю что задача несложная, но с "магией шаблонов" понять становится мудрено :) Во всяком случае функтор лучше сделать константным
Код И изучать в отладчике место вылета, возможно сам контейнер испорчен Название: Re: Проблема с шаблонами Отправлено: andrew.k от Сентябрь 03, 2012, 10:36 И изучать в отладчике место вылета, возможно сам контейнер испорчен Какой же отладчик, если оно не компилится?Название: Re: Проблема с шаблонами Отправлено: Igors от Сентябрь 03, 2012, 14:49 Какой же отладчик, если оно не компилится? Ага, точно, то я попутал (запуганный лесом template :))Не наблюдаю оператора () у самого binary_function, вижу только у порожденного (который здесь ни при чем) Название: Re: Проблема с шаблонами Отправлено: Rotten_c от Сентябрь 03, 2012, 21:27 Не наблюдаю оператора () у самого binary_function, вижу только у порожденного (который здесь ни при чем) sergey_, Igors,Основываясь на (C++ Reference (http://www.cplusplus.com/reference/std/functional/binary_function/)) Цитировать Binary function object base class This is a base class for standard binary function objects. Generically, function objects are instances of a class with member function operator() defined. This member function allows the object to be used with the same syntax as a regular function call, and therefore it can be used in templates instead of a pointer to a function. Тоесть у объекта есть оператор(), который позволяет использовать его как функцию. И оттуда же пример кода Код Другое дело, что я не правильно его использую. В итоге заменил функтор шаблонной функцией, все собралось. К сожалению, так и не понял, что нужно было сделать, чтобы заработало через функтор, ведь это по сути близко к функции. Если кто-нибудь объяснит в чем моя ошибка, буду очень благодарен. Спасибо всем, кто откликнулся. Название: Re: Проблема с шаблонами Отправлено: Igors от Сентябрь 03, 2012, 22:11 Тоесть у объекта есть оператор(), который позволяет использовать его как функцию. И оттуда же пример кода У порожденного класса - есть, но у Вас же тип Sorter = binary_function<..> а у нее нетНазвание: Re: Проблема с шаблонами Отправлено: Rotten_c от Сентябрь 03, 2012, 22:26 Igors
Теперь кажется понял. Sorter следовало объявлять Код ? И в качестве Sorter передать наследника binary_function Название: Re: Проблема с шаблонами Отправлено: Igors от Сентябрь 03, 2012, 22:39 Можно, но так "еще больше магии". Может просто так
Код
Название: Re: Проблема с шаблонами Отправлено: Rotten_c от Сентябрь 03, 2012, 22:59 Почти так же и сделал. Ваш вариант мне нравится даже больше...
|