我使用std::ptr_fun如下:
static inline std::string <rim(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;
}
Run Code Online (Sandbox Code Playgroud)
如本回答所示.
但是这不能用C++ 17编译(使用Microsoft Visual Studio 2017),错误如下:
error C2039: 'ptr_fun': is not a member of 'std'
Run Code Online (Sandbox Code Playgroud)
怎么解决这个问题?
Nic*_*las 35
你使用lambda:
static inline std::string <rim(std::string &s) {
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int c) {return !std::isspace(c);}));
return s;
}
Run Code Online (Sandbox Code Playgroud)
你引用的答案是从2008年开始,早在C++ 11和lambdas存在之前.
Bar*_*rry 16
只需使用lambda:
[](unsigned char c){ return !std::isspace(c); }
Run Code Online (Sandbox Code Playgroud)
请注意,我将参数类型更改为unsigned char,请参阅说明std::isspace原因.
std::ptr_fun 在C++ 11中已弃用,并将在C++ 17中完全删除.
根据cppreference,std::ptr_fun自 C++11 起已弃用,自 C++17 起已停止使用。
同样,std::not1自 C++17 起已弃用。
所以最好不要使用任何一个,而是使用 lambda (如其他答案中所解释的)。