gpt4 book ai didi

c++ - 如何为我的类(class)创建 endl 操纵器?

转载 作者:行者123 更新时间:2023-11-30 02:54:49 24 4
gpt4 key购买 nike

我的类(class)看起来像:

class FileOut
{
private:
std::ofstream stream;
public:
FileOut(string sciezka);
~FileOut(void);

friend FileOut & operator<< (FileOut & obiekt, const char* w);
friend FileOut & operator<< (FileOut & obiekt, const string & w);
friend FileOut & operator<< (FileOut & obiekt, const char & znak);
friend FileOut & operator<< (FileOut & obiekt, const int & liczba);
friend FileOut & operator<< (FileOut & obiekt, const double & liczba);
friend FileOut & operator<< (FileOut & obiekt, std::endl);
//friend FileOut & endl (FileOut & obiekt);
};

operator<<适用于字符串、char、int 等(我将新字符放入 stream )。我想实现操纵器 endl为了我的课。通常我们这样覆盖它:

ostream & endl (ostream & os){ return os << '\n'; }

但它不适用于我的类(class)。我声明

friend FileOut & endl (FileOut & obiekt);

但它不起作用。我该怎么做才能写:

FileOut save("file.txt");
save<<"tralalala"<<endl<<1123;

???

最佳答案

由于std::eol实际上是一个兼容ostream& (*fctr) (ostream&)类型的函数模板,所以需要重载如下运算符:

class FileOut
{
//...
friend FileOut & operator<< (FileOut & obiekt, ostream& (*fctr) (ostream&))
//...
};

在重载中,您需要确保 fctr 确实匹配 eol(它可以是 eof、tab 或任何与签名匹配的操纵器),然后将您想要写入的任何内容写入 eol 上的文件:

#include <fstream>
#include <string>
#include <iostream>

using namespace std;

class FileOut
{
private:
std::ofstream stream;
public:
FileOut(std::string sciezka):stream(sciezka) {};
~FileOut(void){};

friend FileOut & operator<< (FileOut & obiekt, const char* w) {obiekt.stream<<w;return obiekt;} ;
friend FileOut & operator<< (FileOut & obiekt, const string & w);
friend FileOut & operator<< (FileOut & obiekt, const char & znak);
friend FileOut & operator<< (FileOut & obiekt, const int & liczba){obiekt.stream<<liczba;return obiekt;};
friend FileOut & operator<< (FileOut & obiekt, const double & liczba);
friend FileOut & operator<< (FileOut & obiekt, ostream& (*pf) (ostream&));
//friend FileOut & endl (FileOut & obiekt);
};

FileOut & operator<< (FileOut & obiekt, ostream& (*pf) (ostream&))
{
if(pf==&std::endl)
{
obiekt.stream<<"MY FAT JUICY EOL";
}

return obiekt;
}

int main(int argc, char* argv[])
{
FileOut save("file.txt");

save<<"tralalala"<<endl<<1123;
return 0;
}

关于c++ - 如何为我的类(class)创建 endl 操纵器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com