Я использую C++ 11. У меня есть класс Base
и несколько производных классов для построчного анализа различных файлов конфигурации.
template <class T>
class Base
{
public:
virtual ~Base();
bool load_from_file(const QString& str);
virtual void* get_data(const QString& str) const = 0;
private:
QList<QSharedPointer<T> > items_;
};
Каждый потомок (class Derived: public Base<My_struct>
) должен обеспечивать get_data()
реализацию.
Каждый экземпляр My_struct
содержит информацию из определенной строки файла настроек.
Например, представьте типичный файл со списком прокси-серверов.
Экземпляры My_struct
завернуты в интеллектуальные указатели в классе Base
в методе load_from_file()
и присоединены к элементу items_
. Метод load_from_file()
преобразует void*
в T*
перед переносом.
Можно ли перепроектировать эти классы, чтобы не использовать void*
(и без библиотек типа boost::any
)?
Я имею в виду рассмотрение CRTP и так далее. Обычно примеры CRTP содержат методы производных классов с void
возвращаемыми значениями (как процедуры в Паскале).
get_data
возвращал?My_struct
? - person Mark Ransom   schedule 02.06.2016class Derived: public Base<Derived>
, а не какая-то другая структура. Затем вы можете заставить функцию возвращатьT *
. - person M.M   schedule 02.06.2016