0

我有一个模板类,一旦它得到一个string作为 aT和另一个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
            }
4

2 回答 2

2

您的问题是if运行if 检查,并且所有可能的类型都必须编译,无论代码是否可以实际执行。所以什么时候Tstring*导致代码失败。

最简单的解决方案是提供一个operator<<与指针一起工作的重载并删除*

ostream& operator<< (ostream &wyjscie, Para const* ex)
{
    return wyjscie << *ex;
}
于 2013-04-30T01:45:22.763 回答
1
T t

不是指针,因为 0x499602D2 提到..

T* t

是一个指针,并且可以像cout<<*t<<endl;模板参数需要是类型一样被取消引用,并且指向类型的指针无效。

于 2013-04-30T01:41:45.140 回答