#c #templates
Вопрос:
Я хотел уменьшить количество шаблонов при добавлении clone()
методов в некоторый существующий код. Я придумал следующие шаблоны:
template<typename Interface>
class CloneableInterface {
public:
virtual std::unique_ptr<Interface> clone() = 0;
};
template<typename Interface, typename Implementation>
class CloneableImpl : public Interface {
public:
std::unique_ptr<Interface> clone() override {
return std::unique_ptr<Interface>(
new Implementation(*((Implementation *) this)));
}
};
Таким образом, можно определить интерфейс, который имеет метод виртуального клонирования, например:
class Base; // forward declaration
class Base : public CloneableInterface<Base> { ... };
И его реализация(ы) выглядит так:
class Impl; // forward declaration
class Impl : public CloneableImpl<Base, Impl> {
public:
Impl(const Implamp;); // copy constructor
};
Я что-то не так делаю? например, должен ли я ожидать, что столкнусь с некоторыми проблемами в будущем?