gpt4 book ai didi

c++ - 如何从 std::vector 转换为 args

转载 作者:太空狗 更新时间:2023-10-29 20:10:07 25 4
gpt4 key购买 nike

我有一个像这样接受多个参数的函数:

void test(const auto&...args)
{
typedef boost::variant<int, float, std::string> Variant;
std::vector<Variant> vec = {args...}
}

这很好用——根据 Variant,参数在 vector 中作为不同的类型

我想从一个类似的 vector 中获取参数并将其放回一个接受参数的函数中...

像这样:

args = vec;
test2(args);

void test2(const auto&...args);

如何做到这一点?

最佳答案

这是可以做到的。但是由于 vector 的大小仅在运行时已知,因此大小不匹配的错误也一定会在运行时发生。

这是我的做法:

template<std::size_t... S>
void unpack_vector(const std::vector<Variant>& vec, std::index_sequence<S...>) {
test2(vec[S]...);
}

template<std::size_t size>
void unpack_vector(const std::vector<Variant>& vec) {
if (vec.size() != size) throw /* choose your error */;
unpack_vector(vec, std::make_index_sequence<size>());
}

然后你可以这样调用它:

unpack_vector<6>(vec);

请注意,此函数会将 Variant 实例发送到函数 test2

我必须承认这可能是个坏主意,运行时错误不是最好的。我建议您检查您的设计,以便不需要它。

关于c++ - 如何从 std::vector 转换为 args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41980888/

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