我有一个std::vector
参数,我想用它们调用一个函数。有什么办法吗?
特别是该函数是mysqlx
select函数,而参数是我要查询的列;它们都是std::string
类型。该功能的目的是减少代码库中的重复。
(这似乎是一个有用的话题,但是我无法通过搜索找到答案。如果我没有找到答案,并且已经得到答案,请指出该问题,并重复进行,谢谢。)< / p>
答案 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);
}