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