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次重载运算符+在派生类中无法正常工作

std::set 和 < 运算符重载的奇怪行为?

std :: optional的模棱两可的运算符重载?

带有 std::function 参数的重载运算符

C++ 将自定义类型的转换运算符重载为 std::string

C++ 运算符重载和继承