c++ - 重载 Iostream C++

标签 c++ overloading iostream

我正在编写一个仅 header 的 matrix3x3 实现,我希望它是独立的并且不依赖于其他 header ,除了我也编写的 vector3 header 。

目前,我希望它重载 ostream << 运算符,但我不想在其中包含 iostream

如果包含 ostream 是否可以使重载成为可选的并工作,如果不包含它是否可以让所有其余的工作在没有重载的情况下正常工作?

我考虑过检查是否包含 ostream header 的可能性,但它有一个主要缺陷,因为如果 iostream 包含在 matrix3x3 header 之后,它将无法正常工作.

编辑: 我已将 iostream 替换为 ostream,因为我认为它对问题的要点造成了一些混淆。

最佳答案

为什么不使用 <iosfwd>

例子:

#include <iosfwd>

class Example
{
public:
    Example(int i) : i(i) {}
private:
    int i;
    friend std::ostream& operator<<(std::ostream& os, Example const& example);
};

#include <iostream>

int main()
{
    Example e(123);
    std::cout << e << '\n';
}

std::ostream& operator<<(std::ostream& os, Example const& example)
{
    os << example.i;
    return os;
}

请注意,您无法在自己的代码中安全地转发声明标准类。相关问题:

关于c++ - 重载 Iostream C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47462087/

相关文章:

c++ - gcc 堆栈优化

c++ - 如何使用带有C++扩展名的VSCode中显示的参数获取调用g++的命令?

rust - 如何在 Rust 中选择合适的 trait 实现?

c++ - 我正在尝试对运算符 '+'进行二进制重载,但输出错误,我不明白为什么?

programming-languages - 按返回类型重载函数?

java - 是否可以将 "tail -f"命令的输出获取到 java 程序?

引用动态库的 Android NativeActivity 部署失败

c++ - 无法使用外部类对象访问内部类成员

c++ - Qt 可以使用 cin 吗?

c++ - 在调用 std::getline 之前检查数据可用性