Параметры шаблона нетипичного типа [Перегрузка оператора Bool] - PullRequest
0 голосов
/ 19 ноября 2018

Мне было интересно, есть ли способ сделать что-то вроде этого:

     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 и node_2 меняют позиции.

Буду признателен, если кто-нибудь сможет решить эту проблему.

1 Ответ

0 голосов
/ 19 ноября 2018

Если я правильно понимаю ваш вопрос, вы можете создать шаблон 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.В качестве альтернативы, если вы хотите получить гарантированный переворот только для аргумента, вы можете специализироваться, но я сомневаюсь, что вам это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...