gpt4 book ai didi

c++ - 关系运算符实现困境

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:16 24 4
gpt4 key购买 nike

我正在设计几个需要支持运算符的类 != , > , <= , 和 >= .这些运营商将在运营商方面实现 ==< .

在这个阶段,我需要在继承¹ 和强制我的消费者使用 std::rel_ops 之间做出选择。 ² “手动”。

[1] 继承(可能的实现):

template<class T> class RelationalOperatorsImpl
{
protected:
RelationalOperatorsImpl() {}
~RelationalOperatorsImpl() {}

friend bool operator!=(const T& lhs, const T& rhs) {return !(lhs == rhs);}
friend bool operator>(const T& lhs, const T& rhs) {return (rhs < lhs);}
friend bool operator<=(const T& lhs, const T& rhs) {return !(rhs < lhs);}
friend bool operator>=(const T& lhs, const T& rhs) {return !(lhs < rhs);}
};

template<typename T> class Foo : RelationalOperatorsImpl< Foo<T> >
{
public:
explicit Foo(const T& value) : m_Value(value) {}

friend bool operator==(const Foo& lhs, const Foo& rhs) {return (lhs.m_Value == rhs.m_Value);}
friend bool operator<(const Foo& lhs, const Foo& rhs) {return (lhs.m_Value < rhs.m_Value);}

private:
T m_Value;
};

[2] std::rel_ops胶水:

template<typename T> class Foo
{
public:
explicit Foo(const T& value) : m_Value(value) {}

friend bool operator==(const Foo& lhs, const Foo& rhs) {return (lhs.m_Value == rhs.m_Value);}
friend bool operator<(const Foo& lhs, const Foo& rhs) {return (lhs.m_Value < rhs.m_Value);}

private:
T m_Value;
};

void Consumer()
{
using namespace std::rel_ops;

//Operators !=, >, >=, and <= will be instantiated for Foo<T> (in this case) on demand.
}

我基本上是在尝试避免代码重复。关于哪种方法“感觉”更好,有什么想法吗?

最佳答案

您是否考虑过使用 boost ,并让您的类(class)继承自 boost::less_than_comparable<T>boost::equality_comparable<T> ?这类似于您的第一个建议,有一些优点和缺点。优点:避免代码重复;缺点:产生对 boost 的依赖。

由于 boost 是一个非常常见的 C++ 库(如果您还没有使用它,您应该认真考虑开始使用它),配置因素变暗。

关于c++ - 关系运算符实现困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/671760/

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