如何解决没有匹配的函数来调用 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
还有一些与我无关的内容。
请帮忙编译这个
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。