gpt4 book ai didi

c++ - 非类型模板参数 [ bool 运算符重载]

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:31 32 4
gpt4 key购买 nike

我想知道是否有任何方法可以做这样的事情:

     Template<class T, int node_1, int node_2>
class Node_
{
private:
//stuff goes here
public:
bool operator==(const Node<T,node_1,node_2> &rhs) const
{
//stuff goes here.
}

**Test.cpp**

#include "Node.h"
//all includes

template <int node_1, int node_2>
using NodeD = Node<double, node_1, node_2>;



void test_it_by_comparing()
{
using NodeDRC = NodeD<node_1, node_2>;
using NodeDCR = NodeD<node_2, node_1>;

//observe position of non-type node_1 and node_2.

using NodeD0 = NodeD<0, 0>;
constexpr int node_1 = 2;
constexpr int node_2 = 4;
double v=1.;
assert("compare check"&& !(NodeDCR(v) == NodeDRC(v)));
assert("compare check" && NodeD0(0) != NodeDRC(v));
assert("compare check" && !(NodeD0(0) == NodeDRC(v)));
}

这迫使我实现不同数量的相同运算符以接受适当的类型,因为 node_1node_2 模板参数切换位置。

如果有人能解决这个问题,我将不胜感激。

最佳答案

如果我正确理解你的问题,你可以模板化 operator ==完成你想要的:

template<int M1, int M2>
bool operator ==(Node<T,M1,M2> const& rhs) const
{
// whatever you want
}

请记住,这意味着任何 Node<T,N1,N2>可以与任意 Node<T,M1,M2> 进行比较.只有T lhs 和 rhs 参数的强制要求相同。或者,如果您希望保证唯一的参数翻转,您可以专门化,但我怀疑您是否需要它。

关于c++ - 非类型模板参数 [ bool 运算符重载],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53368204/

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