У меня есть следующие классы:
class A {
public:
virtual std::string Serialize();
virtual void Deserialize(std::string);
template <typename T>
T* Clone()
{
std::string s = Serialize();
T* t = new T();
t->Deserialize(s);
return t;
}
};
class B : public A {
public:
std::string Serialize() { ... }
void Deserialize(std::string) { ... }
};
Теперь, если я хочу клонировать B, я делаю следующее:
B b1;
B* b2 = b1.Clone<B>();
Есть ли способ удалить тип шаблона без повторной реализации Clone
в каждом производном классе?
Мне нужно что-то вроде этого:
B b1;
B* b2 = b1.Clone();