在c ++中具有函数对象自动检测类型

时间:2015-12-30 23:59:17

标签: c++ templates function-object

我想按相反顺序对包含整数的向量进行排序,但由于我已经习惯在c ++中输入演绎,我已经传递了函数对象更大<>()而没有指定int,既然还有什么呢?这不能使用g ++,但确实可以使用visual studio编译器,但是我注意到visual studio使用了void(不确定这是否正常)。函数对象是否可以自动推断类型,为什么或为什么不?如果没有,有一些解决方法,因为类型可以变长很长?

2 个答案:

答案 0 :(得分:2)

这是c ++ 14引入的一个功能(g ++ 5.1支持,可以通过传递-std=c++14标志来激活)。

如果您没有指定类型,编译器将采用存在a specialization的默认值(void)。此专门化具有模板operator()成员函数,然后编译器根据迭代器的值类型推导出参数类型。

答案 1 :(得分:1)

自{C} 14以来,std::greater<void>void的特殊化是std::greater<class T>的默认模板参数。

此专门化只是实现x > y,推导出参数和返回类型。