如何遍历可变参数模板以填充 POD 数组

How to iterate through a variadic template to fill a POD array

本文关键字:填充 数组 POD 参数 变参 何遍历 遍历      更新时间:2023-10-16

如何在 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(&params[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 请参阅此答案以供参考。