我有這樣的代碼:可以定義模板類內的嵌套模板類的非交換運算符嗎?
template<typename T>
class A
{
public:
template<typename innerT>
class B
{
};
};
而且我想申報「==」操作上的一個<牛逼> :: 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 '。在比較運算符中,const引用更爲可取。 –
Constructor