功能的模板

Vij*_*jay 6 c++ templates

我在接受采访时问过这个问题:

假设你有一个函数可以接受任何类型的参数和任意数量的参数.你会如何编写模板函数?

我不知道确切的答案.任何人都可以建议吗?

ybu*_*ill 12

他们检查了您对即将推出的C++标准的认识.新功能称为"Variadic模板",如下所示:

template<typename... Args> void f( const Args&... args )
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

有关更复杂的示例,请参阅本教程.

  • @Default:省略号和可变参数模板是完全不同的东西,即使它们拼写相同(省略号:`void foo(int x,...);`,变量模板:`template <typename ... Args> void foo(Args && ... x);`).C++ 0x仍然有省略号,但仍然不建议使用它,原因包括它不是类型安全且不处理用户定义类的事实. (5认同)
  • 参数列表也可以是"Args && ..."以实现完美转发. (2认同)
  • @Default:在省略号表示法(不是模板功能)中,参数的数量和类型是未知的,*从调用中删除*,关于参数的数量和类型的协议必须在别处处理(printf的第一个参数)并且无法通过编译器验证.所有对象必须是POD.在可变参数模板的情况下,因为它在调用位置被实例化,所以编译器将类型(和隐式数量)的参数传递给模板,使其类型安全.请参阅以下简单示例:http://www.ideone.com/dfM59,未传递任何格式字符串,类型已知. (2认同)