如何使用模板为 const 使用运算符重载

问题描述

我试图重载

重载运算符“

我在 MAC 和 C++ 17 上使用带有 gcc 的 Clion。有人可以帮助我理解上述错误的含义以及如何修复它。代码如下。谢谢!

template <typename T>
std::ostream& operator<<(std::ostream& ost,const T data) {
    printf("I am very happy");
    return ost;
}

int main() {

    const char s = 10;

    std::cout << s << std::endl;
}

解决方法

正如上面的评论提到的,你不能重载流输出的主要类型。它已在标准库中定义。因此,为了打印你的overlaod,你必须发明一些不属于主要类型的用户类型,并将用户类型流出来。这将直接导致您的超负荷。

#include <iostream>
template <typename T>
    std::ostream& operator<<(std::ostream& ost,const T data) {
         printf("I am very happy");
         return ost;
        }
int main() {
    struct mytype{  };
    mytype s;
    std::cout << s << std::endl;
}

此代码将打印您的字符串“我很高兴”。开心点。