0

作業中のクラスの to_string() メソッドを作成しました。クラス オブジェクトを出力するために、演算子のオーバーロードと共に使用することになっています。しかし、私がこのようなことをすると:

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

to_string() 関数を呼び出す代わりに、別のクラス用に持っている別の演算子オーバーロードにキャストします。to_string() を直接呼び出していない場合でも、to_string をリンクして暗黙的に Jd オブジェクトを出力する方法はありますか? これも私の 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<<forをオーバーライドして、関数Jdを呼び出す必要がありますto_string()

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