Однако дефаулт конструктор оказался очень неудобным (при переводе на Qt) , и я решил вместо Init иметь нормальные конструкторы во всех классах наследниках (десятка 2). Конечно развалилась хвабрика чтения. Нужно ли ее "домучивать"? Или лучше сбацать в духе "современного С++", там function, bind и все такое? Тогда как?
Почему фабрика развалилась?
В фабрике нельзя просто заменить make() на make( QWidget * parent, Qt::WindowFlags ) или что там используется?
Можно вообще сделать отдельно Qt Widgets и оставить эту сериализацию.
C++ (Qt)
class MyWidget : public QWidget
{
public:
MyWidget ( QWidget * parent, Qt::WindowFlags );
};
C++ (Qt)
class BaseControlSerializer
{
BaseControlSerializer( void );
virtual void Init( QWidget * win, const std::string & txt ... ) = 0;
...
virtual const std::string & SerialName( void ) const;
...
virtual void Read ( Stream & stream ) = 0;
virtual void Write( Stream & stream ) = 0;
virtual QWidget * widget () = 0;
};
template < typename _Widget >
class GenericControlSerializer : public BaseControlSerializer
{
_Widget * m_widget;
private:
GenericControlSerializer ( void );
virtual void Init( QWidget * win, const std::string & txt ... ) override;
...
virtual void Read ( Stream & stream ) override;
virtual void Write( Stream & stream ) override;
virtual QWidget * widget () override { return m_widget; };
};