У меня есть этот код:Можно ли определить некоммутативный оператор для вложенного шаблонного класса внутри шаблонного класса?
template<typename T>
class A
{
public:
template<typename innerT>
class B
{
};
};
И я хочу, чтобы объявить «==» оператора на <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; }
Но это не работает.
Проблема здесь состоит в том, что 'T' является не выводится контекст. – jrok
Даже если замечание @jrok не справедливо, следует использовать конструкцию с ключевым словом 'template' в следующем контексте:' typename A :: template B '. И константная ссылка предпочтительнее в операторах сравнения. –
Constructor