调用带有参数向量的函数

时间:2019-03-27 15:57:31

标签: c++ c++14 dry variadic

我有一个std::vector参数,我想用它们调用一个函数。有什么办法吗?

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

(这似乎是一个有用的话题,但是我无法通过搜索找到答案。如果我没有找到答案,并且已经得到答案,请指出该问题,并重复进行,谢谢。)< / p>

1 个答案:

答案 0 :(得分:3)

您可以执行此操作,最多可达到编译时参数的数量。不好看。

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);
}

See it live