C++ 模板:VS2017 中的 C2143 错误但在 VS2013 中编译

abh*_*ilb 2 c++

我有这个在 VS2013 中编译的代码片段,但在 VS2017 中给了我 C2059 错误。

template <typename ArgumentType>
class MyFunction: public std::unary_function<ArgumentType, ArgumentType>
{
// rest of the code here
}
Run Code Online (Sandbox Code Playgroud)

错误 C2143:Syntaxfehler:Es fehlt "," vor "<"

我在这里查找了错误的文档,但无法找出错误的原因。

我试过

template <typename ArgumentType>
class MyFunction: public std::unary_function<typename ArgumentType, typename ArgumentType>
{
}
Run Code Online (Sandbox Code Playgroud)

并且仍然得到同样的错误。

Max*_*hof 6

std::unary_function在 C++11 中被弃用并在 C++17 中被移除。如果您使用最新的 VS2017 并且没有选择与 C++17 不同的标准,则预计您的代码将无法编译,因为没有std::unary_function.

一般不再需要std::unary_function和朋友了。它所做的只是在您的类中添加两个 typedef,如果您真的想要,您可以手动完成。但是也期望接受任意函子的代码不会依赖于某些成员 typedef 的存在,这就是为什么不需要任何这些的原因。如果删除std::unary_function基类破坏了其他一些代码,正确的操作是修复该代码。

  • @abhilb如果你只删除`std::unary_function`基类会发生什么?是否有任何代码实际上依赖于它的功能? (3认同)
  • @abhilb lambda ;-) (3认同)