Вот моя проблема. У меня есть интерфейс и два производных класса:
class Interface
{
public:
virtual void f() = 0;
};
class Derived1 : public Interface;
class Derived2 : public Interface;
Затем у меня также есть класс Value, содержащий shared_ptr, целью которого является указание на один из двух производных классов:
class Value
{
public:
Value();
Value(const Value&);
private:
shared_ptr<Interface> p_;
};
Поскольку я хочу, чтобы мой класс Value действовал как значение, я хочу, чтобы мой конструктор копирования создавал копию указанного производного объекта. Тем не менее, я не могу написать
Value::Value(const Value& value) :
p_(make_shared<Interface>(*value.p_))
{ }
как интерфейс содержит чисто виртуальную функцию. *value.p_
должен быть производным типом. Я не знаю, как правильно решить эту проблему.
Заранее спасибо.