考慮以下幾點:使用std :: ptr_fun爲一個成員函數
class A
{
public:
bool is_odd(int i)
{
return (i % 2) != 0;
}
void fun()
{
std::vector<int> v2;
v2.push_back(4);
v2.push_back(5);
v2.push_back(6);
// fails here
v2.erase(std::remove_if(v2.begin(), v2.end(), std::not1(std::ptr_fun(is_odd))), v2.end());
}
};
上述代碼無法否定的is_odd()
的效果,因爲它是一個成員函數。致電std::ptr_fun()
失敗。
如何讓它工作?請注意,我想is_odd()
是一個非靜態成員函數。
使'is_odd'成爲一個靜態函數?或者是非會員功能?沒有理由它應該是一個成員函數。 –
@HappyCoder:然後將其設爲靜態成員函數。 –
你可以編寫一個仿函數類,它類似於* [this](int n){return is_odd(n);}'的類型並使用它。 –