你能隐式调用基于对象的方法吗?

时间:2013-10-12 03:02:46

标签: c++

我为我正在处理的类编写了一个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();
} 

2 个答案:

答案 0 :(得分: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_会员。

答案 1 :(得分:1)

您需要覆盖operator<<的{​​{1}}并让其调用Jd函数

to_string()