非类型模板参数[Bool运算符重载]

时间:2018-11-19 04:13:05

标签: c++ c++11 templates

我想知道是否可以做这样的事情:

    loop.run_in_executor(None, update_contacts, data={
        'email': email,
        'access_token': g.tokens['access_token']
    })

由于 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_1模板参数会切换位置,因此我不得不实施不同数量的同一运算符以接受适当的类型。

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

1 个答案:

答案 0 :(得分: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>进行比较。 lhs和rhs参数仅强制T相同。或者,如果您希望只保证参数翻转,则可以专门化,但是我怀疑您需要它。