#pragma once #include "sketchlib_global.h" #include #include class QIODevice; class QByteArray; class QJsonDocument; class QJsonObject; class BaseContainer; class SKETCHLIB_EXPORT ContainerFactory { static QHash m_metaObjects; public: static BaseContainer* createContainer(const QString &path, QObject *parent = Q_NULLPTR); static BaseContainer* createContainer(QIODevice &device, QObject *parent = Q_NULLPTR); static BaseContainer* createContainer(const QByteArray &content, QObject *parent = Q_NULLPTR); static BaseContainer* createContainer(const QJsonDocument &jsonDocument, QObject *parent = Q_NULLPTR); static BaseContainer* createContainer(const QJsonObject &jsonObj, QObject *parent = Q_NULLPTR); template static T1* createContainer(const T2 &arg, QObject *parent = Q_NULLPTR) { auto container = createContainer(arg, parent); auto castedContainer = qobject_cast(container); if(!castedContainer) throw QStringLiteral("not expected type"); return castedContainer; } };