c 17 的 std::ptr_fun 替换

新手上路,请多包涵

我正在使用 std::ptr_fun 如下:

 static inline std::string &ltrim(std::string &s) {
    s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
    return s;
}

本答案所示

但是,这不能使用 C++17(使用 Microsoft Visual Studio 2017)编译,并出现错误:

 error C2039: 'ptr_fun': is not a member of 'std'

如何解决这个问题?

原文由 user3717478 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 748
1 个回答

您使用 lambda:

 static inline std::string &ltrim(std::string &s) {
    s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int c) {return !std::isspace(c);}));
    return s;
}

您引用的答案来自 2008 年,远在 C++11 和 lambda 存在之前。

原文由 Nicol Bolas 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题