7

したがって、すべてのロギング目的で Boost.Log を使用したいと考えています。私は現在、ヘルパー メソッドのインスタンス化と設定に必要なすべての操作を含むクラスを作成しています。

問題は、 << 演算子をオーバーロードして cout の方法で使用したいことです。さまざまな引数の型を持つために使用できるようにしたいのが最大の問題のようです。

これが私が試したものです:

template <typename T>
void trace::operator <<(T data)
{
    std::string text=boost::lexical_cast<std::string>(data);
    std::cout<<data<<std::endl;
    BOOST_LOG_TRIVIAL(debug) << text;
}

ただし、これはロジックに少し欠陥があることを理解しています。複数の引数を << に渡すには、再帰的である必要があります。しかし、ブーストログでこれを行う方法について少し混乱しています。

便利なブースト マクロの代わりに、カスタム シンクを使用してログ システムを定義する必要がありますか? もしそうなら、これは std::ostream の戻り値をサポートしますか? これは、戻り値とストリームへの入力値になると思います。

4

1 に答える 1

5

あなたの質問を正しく理解できたら、<< 演算子を使用してオブジェクトに関する情報をログに記録する必要があります。Boost Log は ostream 互換の演算子を使用するため、クラスに << 演算子を定義するだけで済みます。

class your_class_t{
public:
  std::string m_data;
  int m_value;

  friend std::ostream& operator<< (std::ostream& oss, your_class_t const & val) {
    oss<<val.m_data << ": " << val.m_value;   
    return oss;
  }
}

次に、クラスを ostream にプッシュできます。

your_class_t mytest;
mytest.m_data = "hi";
mytest.m_value = 123;
BOOST_LOG_TRIVIAL(debug) << mytest;

あなたは得るでしょうhi: 123

于 2013-11-09T10:11:53.813 に答える