我有一个模板类,一旦它获得string
T
而另一个Para*
获得T
。
我为<<
重载Para
。
friend ostream& operator<< (ostream &wyjscie, Para const& ex){
wyjscie << "(" << ex.wrt << ", " << ex.liczbaWystapien <<")"<< endl;
return wyjscie;
}
所以要打印它我必须使用cout<<*objectOfClassPara<<endl;
否则我会打印
地址,但我无法为string
执行此操作。
如何更正此代码udner?
T t = n->key;
//cout<<n->key<<endl;
cout<<t<<endl;
if (is_same<T, Para*>::value){
cout<<*t<<endl; //IILEGAL INDIRECTION
}
答案 0 :(得分:2)
您的问题是if
是运行时,如果检查,并且所有可能的类型都必须编译,无论代码是否实际执行。因此,当T
为string
时,*
会导致代码失败。
最简单的解决方案是提供一个使用指针的重载operator<<
并移除*
:
ostream& operator<< (ostream &wyjscie, Para const* ex)
{
return wyjscie << *ex;
}
答案 1 :(得分:1)
T t
不是指针,如0x499602D2提到..
T* t
是一个指针,可以解除引用,如cout<<*t<<endl;
模板参数需要类型,指向类型指针无效。< / p>