BadCats
@BadCats

Как научиться писать относительно универсальный код, используя шаблонны (templates)?

Сейчас, работаю над собственным, небольшим, можно сказать учебным проектом, в котором активно начал использовать template методы. Например:
Внутри `OpenFile` - вызывается шаблонный метод `readData`:

    template<typename retT,typename containerCastClass,typename castedClassType, typename obj_class, typename obj, typename ...args>
        static retT readData( containerCastClass c,castedClassType c1,obj_class cl, obj o,args... ar);

Пример его вызова:

       readData<QStringList>(static_cast<QStringList(QVariant::*)() const>(&QVariant::toStringList),
                                  static_cast<void(QStringList::*)(const QList<QString> &t)>(&QStringList::append),
                                  static_cast< QByteArray ( QIODevice:: * )(qint64 maxSize) >(&QFile::readLine),
                                  currentOpenTxt,
                                  qint64{0});

Собственно, основная работа метода, не учитывая дополнительных проверок:
 

    auto read{
            [&]()->auto{
                static auto castedContainer  =  std::invoke(c, currentContainer);// convert QVariant to QStringList, QMap..
                qDebug()<<typeid (castedContainer).raw_name();
                QString readedData=std::invoke(cl,o,ar...); //read line from txt, row/column from xlsx
                std::invoke(c1,castedContainer,retT({readedData}));//append, insert...
                return castedContainer;
            }
        };

Но, написание подобного кода, далось мне довольно нелегко. Как развить навыки написания "универсального" параметризованного кода (Под универсальным, я понимаю конечно же не "серебряную пулю", а код, под определенный спектр задач, но достаточно гибкий и который можно с относительной легкостью встраивать в проекты со сходными требованиями.).
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы