在 C++ 中让函数对象自动检测类型

Having Function Objects Auto Detect Type in c++

我想以相反的顺序对包含整数的向量进行排序,但由于我已经习惯了在 C++ 中进行类型推导,所以我传递了函数对象 greater<>()没有指定 int,因为它还能是什么?这不适用于 g++,但确实适用于 visual studio 编译器,但是我注意到 void 被 visual studio 使用(不确定是否可以)。函数对象是否可以自动推断类型,为什么或为什么不?如果没有,是否有一些解决方法,因为类型可能会变得很长?

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

此专业化仅实现 x > y、推导参数和 return 类型。

这是c++14引入的特性(g++5.1支持,传递-std=c++14标志即可激活)。

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