Можно ли определить некоммутативный оператор для вложенного шаблонного класса внутри шаблонного класса?

У меня есть этот код:

template<typename T>
class A
{
public:
template<typename innerT>
class B
{
};
};

И я хочу объявить оператор «==» на A<T>:: B<innerT> и «int», чтобы он возвращал разные вещи в зависимости от того, стоит ли целое число первым или вторым.

Метод тестирования будет выглядеть так:

#include <iostream>
int main(int argc, char** argv)
{
A<float>::B<double> b;
std::cout << (b == 2) << " is different from " << (2 == b);
}

Я думал о чем-то вроде этого:

template<typename T, typename innerT> bool operator==(typename A<T>::B<innerT> & one, int two)
{ return true; }

template<typename T,typename innerT> bool operator==(int one, typename A<T>::B<innerT> & two)
{ return false; }

Но это не работает.

2

Решение

Вы можете переместить их в класс A как друзья:

template<typename T>
class A
{
public:
template<typename innerT>
class B
{
};

template<typename innerT>
friend bool operator==(A::B<innerT> & one, int two)
{ return true; }

template<typename innerT>
friend bool operator==(int one, A::B<innerT> & two)
{ return false; }
};

Живой пример

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector