返回 ostream 的 C++ 函数

jma*_*jma 0 c++ ostream c++14

我有很多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 的转换”的建议。

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

use*_*264 5

Basefunction(cout, 3)返回cout

因此,最后一行相当于

cout << 3;
cout << cout << endl;
Run Code Online (Sandbox Code Playgroud)

因为cout << cout没有意义,你会得到一个错误。