c++ - C++ 模板中的非法间接寻址

标签 c++ templates indirection

我有一个模板类,一旦它得到一个 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 做.

如何更正此代码?

T t = n->key;
            //cout<<n->key<<endl;
            cout<<t<<endl;
            if (is_same<T, Para*>::value){
                cout<<*t<<endl; //IILEGAL INDIRECTION
            }

最佳答案

你的问题是if是一个运行时 if 检查,并且所有可能的类型都必须编译,无论代码是否真的可以执行。所以当Tstring , *导致代码失败。

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

ostream& operator<< (ostream &wyjscie, Para const* ex)
{
    return wyjscie << *ex;
}

关于c++ - C++ 模板中的非法间接寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290863/

相关文章:

c++ - 如何从模板类创建具体类

bash - 如何编写一个 Bash 函数来与用户确认现有变量的值

PowerShell - 如何使用另一个变量调用变量?

包含数组的结构的 C++ 初始化

c++ - 为什么这个 OpenMP 程序比单线程程序慢?

c++ - 模板、继承和虚方法 (C++)

c++ - 无法为我的 LruCache 类定义模板化类型

c++ - 在任何情况下,为什么总是输出16号?

c++ - Visual C++ 数组文字

python - 如何从其键是引用字典子集的嵌套字典创建平面字典?