如何遍历可变参数模板以填充 POD 数组
How to iterate through a variadic template to fill a POD array
如何在 POD 数组(c 数组)中总结我的可变参数模板方法的参数?目前我不知道要重复这些论点...
enum class ParamId {kTyp1, kTyp2, kTyp3};
struct Params
{
ParamId* ids;
int32 count;
};
template <typename... Args>
Params add (const ParamId& value, Args&&... values)
{
constexpr int32 count = sizeof... (Args);
ParamId* params = new ParamId[count];
for(int32 i=0; i<count; i++)
{
params[i] = ????
}
return Params {params, count};
}
编辑:我没有使用 for 循环,而是使用反向迭代方法。不幸的是,我需要另一种方法。也许有更好的方法。我将第一个参数添加到我的列表中。
enum class ParamId {kTyp1, kTyp2, kTyp3};
struct Params
{
ParamId* ids;
int32 count;
};
template <typename... Args>
Params add (ParamId value, Args&&... values)
{
constexpr int32 count = 1 + sizeof... (Args);
ParamId params [count];
int32 num = 0;
params[num] = value;
iterate(¶ms[0], num++, values...);
return Params {params, count};
}
template <typename... Args>
void iterate (ParamId* params, int32 num, ParamId value, Args&&... values)
{
params[num] = value;
iterate(params, num++, values...);
}
void iterate (ParamId* params, int32 num) {}
你可以这样做1:
constexpr std::size_t count = 1 + sizeof... (Args);
ParamId* params = new ParamId[count] { value, values... };
假设你想把value
作为第一个元素,你在问题中说,但不是代码的作用。
但在我看来,你最好使用std::vector
直接。
1 请参阅此答案以供参考。
相关文章:
- C++ 填充数组时遇到问题
- 如何使用同时设置计数和填充数组的函数
- 如何使填充数组的函数发送到函数?而不是其参数中的数组
- 如何使用文件填充数组并将其与用户输入C 进行比较
- 使用 memset 填充数组会显示垃圾
- Visual Studio从文件中填充数组时中断
- 分段 填充数组时出错
- 用不同的值填充数组/矢量的边缘和中心
- 使用相同的数据填充数组对象或使用指针
- 是否可以使用三元运算符"?"在 C/C++ 中填充数组列表?
- 填充数组(写入位置0x00000000的访问冲突)
- 从文件中读取输入并填充数组以存储数据供以后使用
- c++当循环在填充数组时没有正确终止时,希望能帮助退出此循环
- 填充数组会导致数组周围的堆栈损坏
- Cuda有效地将数据插入到未排序的填充数组中
- 填充数组的 C++ 函数
- 访问部分填充数组上的第一个打开元素
- 将一个字节数组从C#传递到C++填充数组的C++com对象中
- 如何使用向量中的信息填充数组并从数组中选择随机项
- C,填充数组使用dec2bin转换器