C++ 用参数向量调用函数

C++ 用参数向量调用函数,c++,c++14,dry,variadic,C++,C++14,Dry,Variadic,我有一个std::vector参数,我想用它们调用一个函数。有没有办法做到这一点 特别是函数是mysqlx函数,参数是我试图查询的列;它们的类型都是std::string。该函数的目的是减少代码库中的重复 (这似乎是一个普遍有用的主题,但我无法通过搜索找到答案。如果我没有找到答案,并且这个问题已经得到了回答,请将问题指向我,并将其作为副本关闭,谢谢。)您可以这样做,最多编译时的最大参数数。它不漂亮 using result_type = // whatever using arg_type =

我有一个
std::vector
参数,我想用它们调用一个函数。有没有办法做到这一点

特别是函数是
mysqlx
函数,参数是我试图查询的列;它们的类型都是
std::string
。该函数的目的是减少代码库中的重复


(这似乎是一个普遍有用的主题,但我无法通过搜索找到答案。如果我没有找到答案,并且这个问题已经得到了回答,请将问题指向我,并将其作为副本关闭,谢谢。)

您可以这样做,最多编译时的最大参数数。它不漂亮

using result_type = // whatever
using arg_type = // whatever
using args_type = const std::vector<arg_type> &;
using function_type = std::function<result_type(args_type)>;

template <size_t... Is>
result_type apply_vector_static(args_type args, std::index_sequence<Is...>)
{
    return select(args[Is]...);
}

template<size_t N>
result_type call_apply_vector(args_type args)
{ 
    return apply_vector_static(args, std::make_index_sequence<N>()); 
}

template <size_t... Is>
std::map<size_t, function_type> make_funcs(std::index_sequence<Is...>)
{
    return { { Is, call_apply_vector<Is> }... };
}

result_type apply_vector(args_type args)
{
    // Some maximum limit
    static const auto limit = std::make_index_sequence<50>();
    static const auto funcs = make_funcs(limit);
    return funcs.at(args.size())(args);
}
使用result\u type=//随便什么
使用arg_type=//无论什么

使用args_type=const std::vector

您知道编译时向量的大小吗?“我有一个std::vector参数,我想用它们调用一个函数。有什么方法可以做到这一点吗?”是的。通过调用函数,将向量作为其参数传递,并通过在向量上循环创建SQL语句。是否可以添加一些代码来显示您试图实现的目标?@Artyer否,向量将具有不同的大小。不幸的是,将向量转换为元组似乎仅适用于固定大小的向量(请参阅)否则,您可以使用
std::apply
foo
是“真正可变的”(即任意数量的参数)还是最多N个(例如0到5个参数)?这是什么语法
=[](args\u-type args)
?我的编译器似乎有点困惑。(我有
args\u type
as
const std::vector&
)噢,变量模板是C++17。这是一个由lambda初始化的变量模板。原来一个简单的函数模板就足够了,现在它阻塞了
return{{is,call_apply_vector…}
错误:参数包没有扩展为“…”
。我对它进行了一些调整,但还没有成功编译。