gpt4 book ai didi

c++ - 在 C++ 中将 vector 解包为函数参数的任何解决方案?

转载 作者:可可西里 更新时间:2023-11-01 18:20:46 27 4
gpt4 key购买 nike

我实际上在想类似于 python 中的“*”运算符的东西:

args = [1,2,4]
f(*args)

C++有没有类似的解决方案?

我能想到的如下:

template <size_t num_args, typename FuncType>
struct unpack_caller;

template <typename FuncType>
struct unpack_caller<3>
{
void operator () (FuncType &f, std::vector<int> &args){
f(args[0], args[1], args[3])
}
};

以上我假设只有 int 参数类型。

问题是我觉得为 num_args 的不同值编写 unpack_caller 的所有特化很麻烦。

有什么好的解决办法吗?谢谢。

最佳答案

您可以使用 pack of indices :

template <size_t num_args>
struct unpack_caller
{
private:
template <typename FuncType, size_t... I>
void call(FuncType &f, std::vector<int> &args, indices<I...>){
f(args[I]...);
}

public:
template <typename FuncType>
void operator () (FuncType &f, std::vector<int> &args){
assert(args.size() == num_args); // just to be sure
call(f, args, BuildIndices<num_args>{});
}
};

虽然没有办法消除在模板中指定大小的需要,因为 vector 的大小是一个运行时构造,我们需要在编译时确定大小。

关于c++ - 在 C++ 中将 vector 解包为函数参数的任何解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11044504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com