2

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

4

2 回答 2

2

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

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

于 2015-12-31T00:07:19.107 回答
1

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

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

于 2015-12-31T00:06:49.780 回答