1

ストリーム パラメータの前後にプリセット文字列値を自動的に挿入するマクロ「BracketCout」を定義したいと思います。

#define LEFT_BOUNDARY "["
#define RIGHT_BOUNDARY "]"

#define BracketCout ??????

BracketCout << "123" << "abc"; // outputs "[123abc]"

どうすればそれができますか?

4

2 に答える 2

1

私はすでにログ クラスを使用しているので、Code Clown の提案を実装するのはかなり簡単です。以下は、ロガー クラスの簡略化されたバージョンです。

#define LOG Log().out()

class Log
{
public:
  Log() {}
  virtual ~Log();
  std::ostringstream& out();

public:
  std::ostringstream os;
};


std::ostringstream& Log::out()
{
  os << "["; // beginning
  return os;
}


Log::~Log() // destructor
{
  os << "]";
  std::cout << os.str() << std::endl;
}

それを使用するには、私は電話します

LOG << "abc" << 123; // prints "[abc123]"
于 2013-10-10T10:43:38.337 に答える
1

ちょうどこのような。

#include <iostream>
#include <sstream>

class BracketOut
{
public:
    BracketOut()
    {
        m_stream << '[';
    }

    ~BracketOut()
    {
        std::cout << m_stream.str() << ']' << std::endl;
    }

    std::ostringstream& get() { return m_stream; }

    std::ostringstream  m_stream;
private:
};


int main()
{
    BracketOut().get() << "Hello World";
}
于 2013-10-10T10:45:35.113 に答える