std :: fstream的公共继承和重载运算符<
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std :: fstream的公共继承和重载运算符<相关的知识,希望对你有一定的参考价值。
#include <iostream>
#include <fstream>
#include <string>
class SychronizedFileWriter : public std::fstream {
//std::mutex _mutex;
public:
SychronizedFileWriter(std::string&& filePath);
virtual ~SychronizedFileWriter();
bool is_open() const;
// SychronizedFileWriter& operator<<(const char* s);
// SychronizedFileWriter& operator<<(SychronizedFileWriter& sfw, const signed char* s);
// SychronizedFileWriter& operator<<(SychronizedFileWriter& sfw, const unsigned char* s);
};
SychronizedFileWriter::SychronizedFileWriter(std::string&& filePath)
{
std::fstream::open(filePath, std::ios_base::app);
}
SychronizedFileWriter:: ~SychronizedFileWriter()
{
std::fstream::close();
}
bool
SychronizedFileWriter::is_open() const
{
return std::fstream::is_open();
}
template<typename T, typename S>
T& operator<<(T& fs, const S* s)
{
std::cout << "im here
";
fs.std::fstream::operator<<(s);
return fs;
}
int main(int argc, char *argv[])
{
std::ios_base::sync_with_stdio(true);
SychronizedFileWriter sfw(std::string("./test.txt"));
std::cout << "open: " << std::boolalpha << sfw.is_open();
sfw << "Hello, Worked!!!!" << "
";
exit(0);
}
代码已成功编译。但是,“ text.txt”不包含字符串“ Hello,Worked !!!!”。但它是空的。我的目的只是将此类用作operator <
答案
[SychronizedFileWriter(std::string&& filePath)
中可能有错误...如果您尝试引用一个字符串,则只需要一个&号(std::string& filePath
)。
以上是关于std :: fstream的公共继承和重载运算符<的主要内容,如果未能解决你的问题,请参考以下文章
c ++继承:基类中的2次重载运算符+在派生类中无法正常工作