#include <iostream>
#include <memory>
class Abstract {
public:
virtual const char* name() const { return "Abstract"; }
std::unique_ptr<Abstract> clone() const { return std::unique_ptr<Abstract>{ vclone() }; }
protected:
virtual Abstract* vclone() const = 0;
};
class Implementation : public Abstract {
public:
const char* name() const override { return "Implementation"; }
std::unique_ptr<Implementation> clone() const { return std::unique_ptr<Implementation>{ vclone() }; }
protected:
virtual Implementation* vclone() const override { return new Implementation(*this); }
};
int main()
{
Implementation impl;
Abstract* a = &impl;
std::unique_ptr<Abstract> b = a->clone();
std::cout << b->name() << std::endl;
std::unique_ptr<Implementation> c = impl.clone();
return 0;
}
scanf_s("%s", f, 80);
От этого я и хочу уйти! В объектах данных Group и Leaf (вообще-то они у меня называются File, Group и Text, ибо прога занимается локализацией) не хочется держать ни форматирование таблицы, ни специфичные для графического интерфейса классы. Хочется держать их поближе к интерфейсу, а в консольных версиях проги просто убить.
Для чего консольные версии? Например, я не знаю языка, полагаюсь на внештатных переводчиков и вынужден автоматом собирать текстовый ресурс из того, что всё-таки перевели, и какого-то другого языка, но полного.