Я только начал изучать основы Boost, и сейчас я занимаюсь следующим упражнением:
Создание программы с несколькими объектами животного типа с именами переменных члена, leg и имеет_хвост. Храните объекты в контейнере из Boost.PointerContainer. Сортируйте контейнер в порядке возрастания на основе ветвей и запишите все элементы в стандартный вывод.
Проблема связана с тем, что я не могу отсортировать контейнер ПОСЛЕ вставки, и я, вероятно, должен попробовать использовать только библиотеку PointerContainer.
Ниже приведен код, который я написал на основе одного из примеров, приведенных в руководстве
class Animal{
private:
std::string name;
int legs;
bool hasTail;
public:
Animal() = delete;
Animal(char* aName, int nLegs = 0, bool sTail = false) : name(aName), legs(nLegs), hasTail(sTail) {};
inline int getLegs(){ return legs; };
friend std::ostream& operator<<(std::ostream& os, const Animal& animal);
};
std::ostream& operator<<(std::ostream& os, const Animal& animal)
{
os << "Name: " << animal.name << " || Legs: " << animal.legs << " || Has a tail? " << animal.hasTail << std::endl;
return os;
}
int main()
{
Animal cat("Cat", 4, true), spider("Common Spider", 8, false), slug("Slug");
std::set<std::unique_ptr<Animal>, boost::indirect_fun<std::less<int>>> v;
v.insert(std::unique_ptr<Animal>(&cat));
v.insert(std::unique_ptr<Animal>(&spider));
v.insert(std::unique_ptr<Animal>(&slug));
//print result
}
Конечно, я знаю причину, по которой это не так. не потому, что я пытаюсь использовать косвенный_фун с параметром int, но я передаю объект типа Animal в набор, просто чтобы дать вам представление о том, какие инструменты мне «разрешено» использовать для упражнение и какая у меня была общая идея.