Мне нужно иметь std::vector
из boost::ptr_vector
с. Чтобы упростить их управление, я вложил в класс boost :: ptr_vector (Zoo
) и создал из него std :: vector (allZoos
). Посмотрите на минимальный код для воспроизведения этого:
#include <boost/ptr_container/ptr_vector.hpp>
#include <boost/utility.hpp>
class Animal
{
public:
virtual char type() = 0;
};
class Cat : public Animal
{
public:
char type() { return 1; }
};
class Zoo
{
public:
boost::ptr_vector<Animal> animals;
};
int main()
{
std::vector<Zoo> allZoos;
Zoo ourCityZoo;
ourCityZoo.animals.push_back(new Cat());
//Uncommenting any of the lines below causes error:
//allZoos.push_back(ourCityZoo);
//allZoos.clear();
return 0;
}
Объявление allZoos
нормально, но вызов любой из его функций-членов вызывает ошибку компилятора: (Полный журнал ошибок был очень длинным, не опубликован)
C2259: 'Animal' : cannot instantiate abstract class c:\boost_1_49_0\boost\ptr_container\clone_allocator.hpp 34 1
Это не имело никакого отношения к не копируемому служебному классу boost и пользовательским new_clone
функциям, и я попробовал их без удачи. Как это можно решить?
(я использую VS2010)