gpt4 book ai didi

c++ - 定义所有关系运算符的更短代码

转载 作者:太空狗 更新时间:2023-10-29 23:52:11 26 4
gpt4 key购买 nike

如果我们想基于一个已经拥有这些运算符的成员来创建一个类的所有关系运算符,没有比这更短的方法了吗?

struct foo {
some_class mem; //some_class already has all the relational operators
//other members
}

//is there really no shorter way than to type these 6 functions?
bool operator==(const foo &lhs, const foo &rhs) { return lhs.mem == rhs.mem; }
bool operator!=(const foo &lhs, const foo &rhs) { return lhs.mem != rhs.mem; }
bool operator<(const foo &lhs, const foo &rhs) { return lhs.mem < rhs.mem; }
bool operator>(const foo &lhs, const foo &rhs) { return lhs.mem > rhs.mem; }
bool operator<=(const foo &lhs, const foo &rhs) { return lhs.mem <= rhs.mem; }
bool operator>=(const foo &lhs, const foo &rhs) { return lhs.mem >= rhs.mem; }

最佳答案

严格(对所有函数使用底层成员),否。

但是,您可以使用 boost::operators减少要实现的功能数量:

struct foo: boost::less_than_comparable<foo>, boost::equality_comparable<foo>
{
some_class mem; //some_class already has all the relational operators
//other members
}

bool operator<(const foo &lhs, const foo &rhs) { return lhs.mem < rhs.mem; }
bool operator==(const foo &lhs, const foo &rhs) { return lhs.mem == rhs.mem; }

但是请注意,其他运算符将根据 foo 定义,而不是根据 member 定义,即

bool operator !=(const foo &lhs, const foo &rhs) { return !(lhs == rhs); }

关于c++ - 定义所有关系运算符的更短代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com