【发布时间】:2011-10-19 22:46:45
【问题描述】:
我正在寻找类似的东西:
template< typename T>
void func(T t)
{
}
template< typename... Parms>
void anyFunc( Parms... p)
{
func<Parms>(p)... ; //error
func(p)... ; //error
}
如果参数包扩展是在另一个函数调用中完成的:
template< typename T>
int some(T t)
{}
template< typename... Parms>
void func(Parms ...p)
{}
template< typename... Parms>
void somemore(Parms... p)
{
func( some(p)...);
}
int main()
{
somemore(1,2,3,4,10,8,7, "Hallo");
}
参数包扩展也适用于基类初始化器列表。
是否有任何解决方案也适用于返回“void”的函数。上述解决方法不会,而在参数列表中使用返回 void 的函数调用将永远无法工作。
有什么想法吗?
【问题讨论】:
-
Hacky 解决方案是将函数调用与逗号运算符结合起来(因此包扩展模式不会产生
void)并使用某种只是“吃掉”其参数的虚拟函数。像this 这样的东西。怀疑这是你想要的东西,虽然。 :)