【发布时间】:2013-02-03 14:28:52
【问题描述】:
#include <functional>
void f1(int)
{}
void f2(int, ...)
{}
int main()
{
std::function<void(int)> g1 = f1; // OK.
std::function<void(int, ...)> g2 = f2; // Error! Not standard C++!
}
为什么C++11不提供专门的模板类如下:
template<class ResultType, class... ArgTypes>
class function<ResultType(ArgTypes......)>
{
// ... ... ...
};
【问题讨论】:
-
你有没有测试过一个看起来像这样的模板,看看它是否可以工作?
-
你的两个 sn-ps 显示完全不同的东西。可变参数模板在编译时处理。 “C”风格的变量参数在运行时处理。
-
保留
...(不在可变参数模板中)参数语法是为了向后兼容 C。强烈建议不要使用它。 -
@MarkGarcia:就 C++ 规范而言,它没有被弃用。只是建议人们不要使用它,除非他们真的需要它。
-
IMO 最大的技术障碍是不能转发可变参数列表(我的意思是这里的省略号)。这使得类型擦除很难完成。
标签: c++ function templates c++11 variadic-templates