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

时间:2019-01-11 15:11:19

标签: c++

如何在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 个答案:

答案 0 :(得分:0)

您可以执行此操作 1

constexpr std::size_t count = 1 + sizeof... (Args); 
ParamId* params = new ParamId[count] { value, values... };

假设您想将value放在第一个元素中,您在问题中说这是不是代码的作用。

但我认为,最好使用std::vector Directlry。

1 参见this answer作为参考。