【发布时间】:2015-03-13 22:24:53
【问题描述】:
我有
void foo(double &arg, uint8_t *data)
{
// ...
}
template <class T>
void foo(T &arg, uint8_t *data)
{
// ...
}
我称之为
template <class ...T>
void bar(T... arg)
{
uint8_t *data = new uint8_t[SOME_VALUE];
// guaranteed to be executed in order
auto list = {(foo(arg, data), 1)...};
// ...
}
但是当使用 0 个参数调用 bar 时它会失败,因为在初始化列表中调用 foo 的方式。
如何修改它以使bar 使用空参数包?结果应该就像初始化列表从未执行过一样。
当我们在bar 和可变参数模板@ 987654329@ 调用自身,直到其参数包为空。 (主要是因为后者似乎很昂贵——当包有很多参数时,堆栈会下降很多,这会导致生成许多不同的模板版本foo。)
【问题讨论】:
标签: c++ templates c++11 variadic-templates