0

我为我正在处理的一个类编写了一个 to_string() 方法。它应该与运算符重载一起使用以打印类对象。但如果我做这样的事情:

std::ostringstream oss;
oss << Jd(0.5);
BOOST_CHECK_EQUAL( oss.str(), std::string("JD 0.5") );

它不会调用我的 to_string() 函数,而是转换为我为另一个类所拥有的另一个运算符重载。有没有办法可以将我的 to_string 链接到隐式打印 Jd 对象,即使它不直接调用 to_string()?这也是我的 to_string() 方法:

std::string Jd::to_string() const {

    ostringstream oss;
    oss << "JD " << jd_;
    return oss.str();
} 
4

2 回答 2

1

您应该为您的类重载流插入运算符 ( <<) 。Jd

class Jd
{
friend std::ostream& operator<<(std::ostream&, const Jd&);
};

std::ostream& operator<<(std::ostream& out, const Jd& obj)
{
   out << "JD " << obj.jd_;
   return out;
}

如果您不想让operator<<()函数成为朋友,只需调用obj.to_string()而不是直接访问obj.jd_成员。

于 2013-10-12T03:09:23.223 回答
1

您需要覆盖operator<<Jd让它调用您的to_string()函数

std::ostringstream& operator<<(std::ostringstream& os, const Jd& jd)
{
  os << jd.to_string();
  return os;
}
于 2013-10-12T03:10:27.710 回答