你不需要使用std::bind
或std::remove_if
为此; std::remove
就足够了:
std::vector<T> v; // Assuming T provides some conversion to bool
// Remove all elements that evaluate to 'false':
v.erase(std::remove(v.begin(), v.end(), false), v.end());
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用std::logical_not
函数对象std::remove_if
:
v.erase(std::remove_if(v.begin(), v.end(), std::logical_not<T>()), v.end());
Run Code Online (Sandbox Code Playgroud)
一个类应该实现一个实际的operator bool()
重载是非常罕见的:由于C++类型系统的问题,提供这样的转换使得很容易错误地编写错误的代码,利用你不希望它的转换用过的.实现safe-bool习语而不是实际的operator bool()
重载要好得多.这样做的缺点是你实际上无法绑定到operator bool()
重载,因为safe-bool习语依赖于转换为某种未指定的类型.