如何将 BOOST_BIND_OPERATOR( !=, not_equal ) 与未定义 != 运算符的 class 一起使用
How to use BOOST_BIND_OPERATOR( !=, not_equal ) with a class that does not define the != operator
此 class Age
没有 operator!=
定义(我无法添加)。
struct Age
{
Age(int i) {integerAge=i; };
int integerAge;
bool operator==(const Age& rhs) const { return this->integerAge==rhs.integerAge; };
//bool operator!=(const Age& rhs) const { return this->integerAge!=rhs.integerAge; }; not availabe
bool operator<(const Age& rhs) const {return this->integerAge<rhs.integerAge;};
};
当我这样做时,c++11 中的代码工作正常:
std::copy_if(v.begin(),v.end(),std::back_inserter(ageof35),boost::bind(&Person::GetAge,_1)==35); //not available in c++03
然而,移植回 c++03 需要表达同样的东西:
std::remove_copy_if(v.begin(), v.end(), std::back_inserter(ageof35),boost::bind(&Person::GetAge,_1)!=35);
唯一的区别是现在请求 BOOST_BIND_OPERATOR( !=, not_equal )
。
完整示例在这里:http://coliru.stacked-crooked.com/a/f1907a032c397986
在STL中定义operator<
和operator==
就足够了,operator!=
只是前两者的组合。但是,boost 绑定明确需要 operator!=
.
如何强制 boost 绑定以使用定义的 operator==
的否定?
Boost 绑定不需要任何运算符。它使用你告诉它使用的那些。
因为你有运算符==
而不是!=
,你可以通过组合!
和==
得到你想要的结果,即:
!(boost::bind(&Person::GetAge,_1) == 35)
此 class Age
没有 operator!=
定义(我无法添加)。
struct Age
{
Age(int i) {integerAge=i; };
int integerAge;
bool operator==(const Age& rhs) const { return this->integerAge==rhs.integerAge; };
//bool operator!=(const Age& rhs) const { return this->integerAge!=rhs.integerAge; }; not availabe
bool operator<(const Age& rhs) const {return this->integerAge<rhs.integerAge;};
};
当我这样做时,c++11 中的代码工作正常:
std::copy_if(v.begin(),v.end(),std::back_inserter(ageof35),boost::bind(&Person::GetAge,_1)==35); //not available in c++03
然而,移植回 c++03 需要表达同样的东西:
std::remove_copy_if(v.begin(), v.end(), std::back_inserter(ageof35),boost::bind(&Person::GetAge,_1)!=35);
唯一的区别是现在请求 BOOST_BIND_OPERATOR( !=, not_equal )
。
完整示例在这里:http://coliru.stacked-crooked.com/a/f1907a032c397986
在STL中定义operator<
和operator==
就足够了,operator!=
只是前两者的组合。但是,boost 绑定明确需要 operator!=
.
如何强制 boost 绑定以使用定义的 operator==
的否定?
Boost 绑定不需要任何运算符。它使用你告诉它使用的那些。
因为你有运算符==
而不是!=
,你可以通过组合!
和==
得到你想要的结果,即:
!(boost::bind(&Person::GetAge,_1) == 35)