没有匹配的函数来调用 std::get 以 const tuple ref 作为参数

问题描述

我一直在尝试创建一个通用函数,以便在 SQL 中构建查询。 为了做到这一点,我使用带有可变参数模板的元组,以使查询更通用。 这是代码(这不是最终代码,因此请了解其中一些代码是伪代码):

#include <tuple>

template<std::size_t I>
struct Visit_Tup_Impl
{
  template<typename ...T>
  static const std::string& visit_tup (const std::tuple<T...>& values,int comp)
  {
    if (I == comp)
    {
      // I know it doesn't do anything - for simplicity
      std::get<I,std::tuple<T...> > (values);
      return EMPTY_STRING;
    }
    else
    {
      return Visit_Tup_Impl<I-1>::visit_tup (values,comp);
    }
  }
};

template<>
template<>
const std::string&
Visit_Tup_Impl<0>::visit_tup (const std::tuple<>& values,int comp)
{
  assert (0 && "Should not happen");
  return EMPTY_STRING;
}

template <typename ...T>
std::string
create_coupled_query (const std::vector<std::string>& keys,const std::vector<std::tuple<T...> >& values)
{
  std::ostringstream local;
  local << "(";

  auto iter = values.begin ();
  auto iter_end = values.end ();
  for (; iter != iter_end; ++iter)
  {
    local << "(";
    int i = 1;
    do
    {
      local << keys [i] << "=" << to_sql_string (Visit_Tup_Impl<(sizeof...(T) - 1)>::visit_tup (*iter,i));
      ++i;
      if (i < keys.size ())
        local << " AND ";
    }
    while (i < keys.size ());

    local << ")";
    if (iter + 1 != iter_end)
      local << " OR ";
  }

  local << ")";

  return local.str ();
}

这是无法编译的行:

std::get > (values);

我收到此编译错误:

没有匹配的函数调用‘get(const std::tuple >&)’

此外,它还为我提供了 std::get 候选对象的建议(在utility.h 下):

template constexpr typename std::tuple_element<_int std::pair _tp2> >::type& std::get(std::pair<_tp1 _tp2>&)

还有一些与我无关的内容。

请帮忙编译这个

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...