yanyiwu / cppjieba

"结巴"中文分词的C++版本
MIT License
2.58k stars 691 forks source link

适配C++20 #170

Closed BHM-Bob closed 2 years ago

BHM-Bob commented 2 years ago

用您的代码的时候,StringUtil.hpp与自己的代码所用的C++标准有冲突。C++新手,直接用的C++20。对您的代码改了点,可以在C++20标准下编译,跑通demo。
before

inline std::string& LTrim(std::string &s) {
  s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<unsigned, bool>(IsSpace))));
  return s;
}

inline std::string& RTrim(std::string &s) {
  s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<unsigned, bool>(IsSpace))).base(), s.end());
  return s;
}

inline std::string& Trim(std::string &s) {
  return LTrim(RTrim(s));
}

inline std::string& LTrim(std::string & s, char x) {
  s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::bind2nd(std::equal_to<char>(), x))));
  return s;
}

inline std::string& RTrim(std::string & s, char x) {
  s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::bind2nd(std::equal_to<char>(), x))).base(), s.end());
  return s;
}

after

inline std::string& LTrim(std::string &s) {
    s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not_fn(std::cref(IsSpace))));
    return s;
}

inline std::string& RTrim(std::string &s) {
    s.erase(std::find_if(s.rbegin(), s.rend(), std::not_fn(std::cref(IsSpace))).base(), s.end());
    return s;
}

inline std::string& Trim(std::string &s) {
    return LTrim(RTrim(s));
}

inline std::string& LTrim(std::string & s, char x) {
    s.erase(s.begin(), std::find_if(s.begin(), s.end(),
        std::not_fn(std::bind(std::equal_to<char>(), placeholders::_1, x))));
  return s;
}

inline std::string& RTrim(std::string & s, char x) {
  s.erase(std::find_if(s.rbegin(), s.rend(),
      std::not_fn(std::bind(std::equal_to<char>(), placeholders::_1, x))).base(), s.end());
  return s;
}
yanyiwu commented 2 years ago

可以试试提交个PR么?

yanyiwu commented 2 years ago

https://github.com/yanyiwu/limonp/pull/31/files

yanyiwu commented 2 years ago

https://github.com/yanyiwu/limonp/pull/31