标签: ostream

扩展 std::cout

std::cout我想扩展使用我自己的控制台/cout 包装类的用法。

理想情况下,我会有 2 个 ostream,一个用于常规打印,另一个用于附加新行。

std::ostream Write;
Write << "Hello, I am " << 99 << " years old.";
Run Code Online (Sandbox Code Playgroud)

印刷Hello, I am 99 years old.

std::ostream WriteLine;
WriteLine << "Hello, I am " << 99 << " years old.";
Run Code Online (Sandbox Code Playgroud)

打印Hello, I am 99 years old.\n(一个实际的新行,而不仅仅是转义)

然后,我想扩展它以具有错误流(例如Error和),该错误流在消息之前添加前缀并以不同的颜色打印。ErrorLine"ERROR: "

我知道我必须创建自己的流来添加此功能,并且我遵循C++ cout 并使用前缀作为前缀std::cout,这几乎是我想要的,但不完全是。我不知道如何在流的末尾添加新行,并且前缀不可靠,特别是当我要执行多个打印语句时。

我还应该提到我不想使用重载运算符来实现这种效果,因为我希望能够以菊花链方式连接事物。

什么不起作用

如果我WriteLine >> "First";这样做,WriteLine << "Second";我会得到奇怪的结果,例如SecondFirst\nSecond\nFirst。我理想的输出是First\nSecond\n. …

c++ winapi cout ostream streambuf

0
推荐指数
1
解决办法
1693
查看次数

返回 ostream 的 C++ 函数

我有很多operator<<()函数都是从做类似的事情开始的,所以我想把它抽象出来。这是我正在尝试做的事情的最小可重复案例(消除了所有的复杂性)。请注意,它不会编译。如果它确实编译了,我希望程序自己在一行上打印数字 3。

/*                                                                                                   
  clang++ -std=c++14 -Wall -Wextra foo.cc -o foo                                                     
*/

#include <ostream>
#include <iostream>

using std::cout;
using std::endl;
using std::ostream;

ostream& BaseFunction(ostream& os, const int x) {
  return os << x;
}

int main(int argc, char *argv[]) {
  cout << BaseFunction(cout, 3) << endl;
}
Run Code Online (Sandbox Code Playgroud)

错误开始是这样的:

foo.cc:17:8: error: invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and
      'ostream')
  cout << BaseFunction(cout, 3) << endl;
  ~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

然后提供了很多“没有已知的从 ostream 到 T 的转换”的建议。

有人看到我做错了什么吗?

c++ ostream c++14

0
推荐指数
1
解决办法
161
查看次数

我如何用两种方式输出 &lt;&lt; 的内容?

例如,如果我想要一个默认的输出版本<<和一个详细的版本。

myClass myObject(//Constructor parameters);

cout << myObject << "\n";
cout << myObject.detailed << "\n";
Run Code Online (Sandbox Code Playgroud)

我尝试在我的班级中制作一个修改器,但这似乎不起作用。

class myClass {
public:
   friend std::ostream& operator<<(std::ostream& output, const myClass& myObject);
   std::ostream& detailed(std::ostream& output);
}
Run Code Online (Sandbox Code Playgroud)

这给出了错误“必须调用对非静态成员函数的引用”。

c++ operator-overloading ostream

0
推荐指数
1
解决办法
187
查看次数

重载运算符&lt;&lt;,os得到一个字符串

所以我的代码有问题,我想重载运算符<<,所有功能都在抽象类Employee中,所以

friend std::ostream &operator<<(std::ostream &os, const Employee &employee) {
    os<<employee.print();
    return os;
}
Run Code Online (Sandbox Code Playgroud)

这是一个函数打印:

virtual const std::string& print() const {
   return "description: "+this->description+ " id: "+ std::to_string(this->getID()); }
Run Code Online (Sandbox Code Playgroud)

描述和ID只是Employee类中的一个变量

而且它不起作用,并且出现异常E0317,我理解它就像打印返回的不是字符串一样。另外,如果我将返回类型更改为

std::basic_string<char, std::char_traits<char>, std::allocator<char>>
Run Code Online (Sandbox Code Playgroud)

它神奇地起作用,但是我不明白为什么我不能使用标准字符串。

c++ string class operator-overloading ostream

-1
推荐指数
1
解决办法
65
查看次数

std::ostream&amp; out 这个朋友重载运算符函数的目的是什么,而不仅仅是 std::cout?

有人可以解释std::ostream &out这个朋友重载运算符函数的目的吗?为什么不直接std::cout在函数内部使用?

friend std::ostream& operator<<(std::ostream& out, const Complex& c) 
{
    out << c.real;
    out << "+i" << c.imag << endl;

    return out;
}
Run Code Online (Sandbox Code Playgroud)

相反,像这样:

friend operator<<(const Complex& c) 
{ 
    std::cout << c.real;
    std::cout << "+i" << c.imag << endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ syntax ostream

-1
推荐指数
1
解决办法
95
查看次数

标签 统计

c++ ×5

ostream ×5

operator-overloading ×2

c++14 ×1

class ×1

cout ×1

streambuf ×1

string ×1

syntax ×1

winapi ×1