template <class T, class U> // Т потомок Uclass GameObjMemCell{ vector<U*> Objects; typename vector<U*>::iterator Iteree;public: GameObjMemCell() //пустой ~GameObjMemCell() //удаляет объекты и освобождает выделенную память void init(int numOfObjs) //выделяет блок памяти под numOfObjs и создает их там int freeObjsNum() //возвращает число свободных объектов U* GetObject() //отдает указатель на базовый класс U, который указывает на самом деле на отбъект типа T (грустно так делать, но надо мне) bool RetObject(U*); //"забирает" объект по указателю, если может и возвращает true, иначе false };
template <class T, class U> U* MemoryCellsManager::takeObject( list< GameObjMemCell<T,U> > ObjGiver, //лист с GameObjMemCell ячейками binary_function<GameObjMemCell<T,U>, GameObjMemCell<T,U>, bool> Sorter, //функтор для сортировки int& initsize) { /*некоторый код*/ ObjGiver.sort(Sorter); //вот этот вызов вызывает ошибку компиляции /*некоторый код*/ }
template<class _Pr, class _Ty1, class _Ty2> inlinebool _Debug_lt_pred(_Pr _Pred, _Ty1& _Left, _Ty2& _Right, _Dbfile_t _File, _Dbline_t _Line) { // test if _Pred(_Left, _Right) and _Pred is strict weak ordering if (!_Pred(_Left, _Right)) //тут return (false); else if (_Pred(_Right, _Left)) //и тут _DEBUG_ERROR2("invalid operator<", _File, _Line); return (true);}
template <class T, class U>class sortByFreeObjs_less:public binary_function<GameObjMemCell<T,U>, GameObjMemCell<T,U>, bool>{public: bool operator() (GameObjMemCell<T,U> a, GameObjMemCell<T,U> b) { return a.freeObjsNum() < b.freeObjsNum(); };};
ObjGiver.sort(Sorter);
C++ (Qt)bool operator() (const GameObjMemCell<T,U> & a, const GameObjMemCell<T,U> & b) const
C++ (Qt)struct Compare : public binary_function<int,int,bool> { bool operator() (int a, int b) {return (a==b);}};
C++ (Qt)template <class T, class U, class S>U* MemoryCellsManager::takeObject( list< GameObjMemCell<T,U> > ObjGiver, S Sorter, int& initsize)
C++ (Qt)ObjGiver.sort(sortByFreeObjs_less <T, U>());