可变变量的包数组
pack array for variadic
我知道从Args... args到像这样的数组相对容易:
template<typename...Args>
void f(Args...args){
double list[] = {args...};
}
但是,有没有办法回到Args,例如:
template<typename...Args>
void f(Args...args){
double list[] = {args...};
//manipulate list[]
//convert list to new_args...
//use it in a function
any_other_f(new_args...);
}
永不言败。由于您似乎知道list
的大小(= sizeof...(args)
),因此您可以使用 c++14 库功能试试运气,并创建一个index_sequence
,然后用于在解压缩期间为列表编制索引。看这里:http://en.cppreference.com/w/cpp/utility/integer_sequence。底部的示例显示了如何执行此操作。
我的第一次尝试:
#include <iostream>
#include <utility>
using namespace std;
template<typename... Args>
void any_other_f(Args... args)
{
double list[] = {args...};
for (auto&& x : list)
cout << x << ", ";
cout << "n";
}
template<typename T, size_t... I>
void wrapper_function(T&& t, index_sequence<I...>)
{
any_other_f(t[I]...);
}
template<typename...Args>
void f(Args...args)
{
constexpr size_t size = sizeof...(args);
double list[] = {args...};
for (int i = 0; i < size; ++i)
list[i] *= -1;
wrapper_function(list, make_index_sequence<size>());
}
int main()
{
f(1.0, 2.0, 3.0);
}
它有效:http://ideone.com/OmfOps。
唯一的要求是你需要知道你想要在编译时解压缩的东西的大小。或者至少你需要做一个猜测,然后在运行时崩溃。
以
您想要的方式是不可能的。数组的内容是一个动态的东西,函数调用的目标(即使是可变的)是由编译时决定的。你为什么要做这样的事情?也许有更好的方法。
相关文章:
- 输出没有重复元素的动态数组(收缩数组)C++
- 将值从另一个数组写入数组,不包括不需要的值 C++
- 使用 GDAL 获取矢量数组中的所有行数和列数
- 将字符串转换为无符号字符数组/字节数组
- 如何有效地找到数组中三元组和的最小差异?
- 如何使用 ROS 从 yaml 文件中读取带有元组的数组?
- 对数组中子数组的引用
- C/C++中数组结构和数组结构的通用接口
- 检查彩虹数组(检查数组的反向样式是否与自身匹配)
- 如何创建对齐的数组 c++ 数组?
- 查找数组中数组元素的重复出现?
- C++释放带有子数组的数组的内存分配
- 求数组中三元组 (i, j, k) 的数量,使得 A[i] + A[j] = 2 * A[k]
- 合并两个数组后数组大小不正确
- 返回一个数组,该数组包含数组中的数量,该数组数量较小或等于给定数组中的元素
- 通过键盘输入字符串数组和 int 数组的数组大小
- 如何在C 中创建类似于Python的Numpy数组的数组
- 如何在构造函数中的类成员数组中分配数组值,而无需使用STD库
- 无法获取数组内数组的总和
- 可变变量的包数组