zoukankan      html  css  js  c++  java
  • 可变参数模板的递归解析

    class DbCommand
    {
      friend class DbQuery;
    public:
      template<typename ...Args>
      DbCommand(const QString& prepare_sql, Args... args) {
        //qDebug() << prepare_sql;
        SetPrepareSql(prepare_sql);
        parse(args...);
      }
    
      DbCommand() = default;
      DbCommand(const DbCommand&) = default;
    
      QString ToString();
    
    private:
      void SetPrepareSql(const QString& sql);
      void AddBindValue(const QVariant& var);
    
      //递归终止函数
      void parse(){}
      //展开函数
      template <typename T, typename ...Args>
      void parse(T head, Args... rest)
      {
        AddBindValue(head);
        //qDebug() << head;
        parse(rest...);
      }
    
    private:
      QString prepare_sql_;
      QVariantList variant_list_;
    };
    

    以下是示例

        DbCommand clear_table("delete from T_TEST");
        auto clear_sqlquery = DbHandler().Connection("test_connection").GetQuery();
        clear_sqlquery.SetCommand(clear_table);
        clear_sqlquery.Exec();
    
        DbCommand command("select id, value from T_TEST where id = ?", 123);
        auto query = DbHandler().Connection("test_connection").GetQuery();
        query.SetCommand(command);
        if(!query.Exec())
        {
          qDebug().noquote() << command.ToString();
          qDebug() << query.ErrorString();  //ERROR REPORT
        }
        auto result = query.Result();
        while(result.Next())
        {
          qDebug() << "id\t" << "value" ;
          qDebug() << result.Value("id").toInt() << "\t" << result.Value("value").toInt();
    
    
  • 相关阅读:
    DMR 系统平方根升余弦滚降滤波器设计SRRC及仿真图
    相似项
    第三种主题暗黑系
    汽油性能
    放平心态
    Python 中的哈希表
    第二种主题
    win7旗舰版 一键激活
    java与c++的不同感受
    c代码待用c++代码
  • 原文地址:https://www.cnblogs.com/xdblog/p/15784644.html
Copyright © 2011-2022 走看看