常见的父类型 ifstream 和 ofstream



我有一个包含std::ofstreamstd::ifstream的类(一次只能激活一个)。我想重载operator()以返回当前活动流。但是std::ofstream和返回公共引用std::ifstream的常见基本类型是什么?

我想

重载运算符()以返回当前活动流 这完全没有意义,闻起来像是设计缺陷。你为什么要退货?该运算符的调用方应该能够对返回值执行哪些操作?它既不能做输入也不能做输出。

我不知道你真正想做什么,但也许这样的事情对你有用,尽管这很危险。

template<typename T> class wrapper
{
  T*const ptr;
  wrapper(T*p) : ptr(p) {}
public:
  bool empty() const { return ptr; }
  operator T& () const
  {
    if(empty()) throw some_exception("trying to use empty wrapper");
    return *ptr;
  }
  friend some_class;
};
class some_class
{
   ifstream _ifstream;
   ofstream _ofstream;
   bool ifstream_is_active;
   bool ofstream_is_active;
public:
   operator wrapper<ifstream> () const
   { wrapper<ifstream>(ifstream_is_active? &_ifstream : 0); }
   operator wrapper<ofstream> () const
   { wrapper<ofstream>(ofstream_is_active? &_ofstream : 0); }
};

但这很危险,因为您可能会处理悬而未决的指针。你可以通过使用shared_ptr来避免这种情况(自己解决这个问题),但这意味着some_class不再控制这些流的生存期。

输入

和输出流是非常不同的类型。它们共享的唯一公共基类是 std::ios 。除了一些错误检查之外,它没有太多内容。

这两种流类型仅共享最基本的接口。出于显而易见的原因,它们彼此关系不大。

相关内容

  • 没有找到相关文章

最新更新