用c++实现函数对象的自动检测类型

Having Function Objects Auto Detect Type in c++

本文关键字:自动检测 类型 对象 函数 c++ 实现      更新时间:2023-10-16

我想按相反的顺序对包含int的向量进行排序,但由于我已经习惯了在c++中键入推导,我已经传递了函数对象greater<>()而不指定int,因为它还能是什么?这在使用g++时不起作用,但在visual studio编译器中起作用,但是我注意到visual studio使用了void(不确定这是否可以)。函数对象是否可以自动推导类型,为什么?如果没有,是否有一些变通方法,因为类型可能需要很长时间才能键入?

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

如果不指定类型,编译器将使用默认类型(void),其中存在专门化。这种专门化有一个模板化的operator()成员函数,然后编译器根据迭代器的值类型推导其参数类型。

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

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