Я использую C++ 11. У меня есть класс Base
и несколько производных классов для синтаксического разбора файлов конфигурации.CRTP и метод return void *
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
(например, процедуры в Pascal).
Какой тип вы действительно хотите вернуть 'get_data'? 'My_struct'? –
CRTP - это класс. Производный: public Base ', а не какая-либо другая структура. Затем вы можете сделать функцию return 'T *'. –
@MarkRansom, я хотел бы вернуть My_struct * в один из производных классов – ilya