ストリーム パラメータの前後にプリセット文字列値を自動的に挿入するマクロ「BracketCout」を定義したいと思います。
#define LEFT_BOUNDARY "["
#define RIGHT_BOUNDARY "]"
#define BracketCout ??????
BracketCout << "123" << "abc"; // outputs "[123abc]"
どうすればそれができますか?
ストリーム パラメータの前後にプリセット文字列値を自動的に挿入するマクロ「BracketCout」を定義したいと思います。
#define LEFT_BOUNDARY "["
#define RIGHT_BOUNDARY "]"
#define BracketCout ??????
BracketCout << "123" << "abc"; // outputs "[123abc]"
どうすればそれができますか?
私はすでにログ クラスを使用しているので、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]"
ちょうどこのような。
#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";
}