gpt4 book ai didi

c++ - 我们可以有一个不在类型上但在操作上的模板吗

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:26 25 4
gpt4 key购买 nike

我是 C++ 新手。我目前有 2 个具有完全相同代码的类,除了在某些时候一个类使用“<”运算符而其他类使用“>”。

有什么方法可以合并这些类并在 '' 运算符上声明一个模板吗?

最佳答案

首先,如果您的问题真的仅限于 <> , 然后你可以创建一个基类,它接受一个 bool 值,说明是使用一个还是另一个。

class base
{
protected:
base(bool use_less) : m_use_less{less}

some_return_type my_fn(some_args args)
{
...
const bool cmp = m_use_less? a < b: a > b;
...
}

private:
const bool m_use_less;
}

如果这样的行

const bool cmp = m_use_less? a < b: a > b;

在您的代码中重复太多次,您可以考虑制作一个内联方法来执行此操作。


不过,如果您愿意,可以将比较进一步概括为许多标准库算法(例如, std::sort ),它们正是这样做的。

通常,标准库算法按如下方式求解(以下假定您对整数进行运算):

#include <functional>

// Pass the comparison as a template argument
template<class Compare=std::less<int>>
class my_class
{
private:
// A comparison object
Compare m_cmp;

public:
some_return_type my_fn(some_args args)
{
...
const bool is_less = m_cmp(lhs, rhs);
...
}

};

默认情况下,此类使用 < (通过 std::less )。如果你想使用 > , 简单地用 std::greater 实例化.

关于c++ - 我们可以有一个不在类型上但在操作上的模板吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38991098/

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