作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个像这样接受多个参数的函数:
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/
我是一名优秀的程序员,十分优秀!