c ++运算符<<对于类中的typedef

时间:2014-04-11 09:36:25

标签: c++ class typedef operator-keyword

我计划在c ++类中使用重载运算符,但不是作为成员函数。问题是运算符不应该处理类本身定义的数据类型,而应该处理类中定义的typedef。 我的代码摘录如下:

头文件中的类定义:

namespace myspace
{
 class Exporter{
 public:
      Exporter(const Markov & MP);
      Exporter(const Network & net);
      ~Exporter();
      void Export(std::string filename);
      typedef std::vector<int> pvi;
      typedef std::vector<std::string> pvs;
 protected:
      void Export1(std::string filename, pvs Mydata);
      void Export2(std::string filename, pvi Mydata2);
      // Helper functions
      friend std::ostream& operator<<(std::ostream&, const pvi& vi);
      friend std::ostream& operator<<(std::ostream&, const pvs& vi);
      ...
 private:
      pvs Data1;
      pvi Data2;
       ...
 };
}

cpp文件中的实现:

using namespace myspace;
//===============================================================================
std::ostream& operator<<(std::ostream& os, const Exporter::pvi& vi)
{
  os << "(";
  std::copy(vi.begin(), vi.end()-1, std::ostream_iterator<int>(os, ","));
  std::copy(vi.end()-1, vi.end(), std::ostream_iterator<int>(os));
  os << ")";
  return os;
}
//===============================================================================
std::ostream& operator<<(std::ostream& os, const Exporter::pvs& vi)
{
  os << "(";
  std::copy(vi.begin(), vi.end()-1, std::ostream_iterator<std::string>(os, ","));
  std::copy(vi.end()-1, vi.end(), std::ostream_iterator<std::string>(os));
  os << ")";
  return os;
}
//===============================================================================
void  Exporter::Export(std::string filename)
{
      Export1(std::string filename, Data1);
      Export2(std::string filename, Data2);
}
//==============================================================================
void  Exporter::Exporter1(std::string filename,pvs Mydata_s)
{
      std::ofstream outf;
      outf.open(filename.c_str());
      outf << Mydata_s << "\n";
      outf.close();
}
//==============================================================================
void  Exporter::Exporter2(std::string filename,pvi Mydata_i)
{
      std::ofstream outf;
      outf.open(filename.c_str());
      outf << Mydata_i << "\n";
      outf.close();
}
//==============================================================================

在编译期间,不会生成引用运算符的警告和错误。但输出似乎没有形成,因此看起来使用了标准/默认运算符。

是否有任何提示或建议如何克服?

0 个答案:

没有答案