提问者:小点点

如何使用模板对常量使用运算符重载


我正试图使<<<;运算符仅用于理解目的。我是成功的,但我遇到了常量数据类型和对象的问题。编译器给出了以下信息:

使用重载运算符“<<>”不明确(操作数类型为“std::__1::Ostream”(又名“basic_Ostream”)和“const char”)

我在MAC和C++17上使用Clion和gcc。有人能帮我理解一下上面的错误意味着什么,以及如何修复它吗?代码在下面。谢啦!

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;
}

共1个答案

匿名用户

正如上面的注释所提到的,您不能重载用于流输出的主类型。它已经在标准库中定义。因此,为了打印您的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;
}

这段代码将打印您的字符串'I am very happy'。开心点。