如何在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) {}
答案 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作为参考。