C++
就能够使用和编写s 而言,这是一种尝试创建一个模仿使用<<
an 运算符的输出行为的类。该类有一个数据成员,即指针。该类有两个重载运算符,一个接受 an ,另一个接受指向函数的指针,其参数是引用并返回引用。那是的签名,据此。从技术上讲,以下程序适用于给定的输入。它能够打印到文件,两行文本由两个s 分隔。但是,我希望我的非字符串参数重载运算符接受ofstream
std::endl
string
ofstream
<<
std::string
ostream
ostream
std::endl
std::endl
<<
std::endl
只是,而不是仅仅与它的签名相匹配的东西。std::endl
我尝试了在参数列表中放置的各种组合,有和没有*
以及有和没有&
,但我得到了每个组合的编译器错误。也欢迎 C++11 答案。
#include <fstream>
#include <iostream>
#include <string>
class TextOut
{
public:
TextOut(std::ofstream* ofsPar) : ofs(ofsPar) {}
TextOut& operator<<(std::string s)
{
*ofs << s;
return *this;
}
TextOut& operator<<(std::ostream& (*endlPar) (std::ostream& os))
{
*ofs << std::endl;
return *this;
}
private:
std::ofstream* ofs;
};
int main()
{
std::cout << "Enter filename: ";
std::string filename;
std::cin >> filename;
std::ofstream myofstream(filename.c_str());
TextOut myTextOut(&myofstream);
myTextOut << "Hello," << std::endl << std::endl << "spacious world.";
return 0;
}
输出:
Hello,
spacious world.