重複の可能性:
c++ で cout の動作をオーバーロードする方法
文字列に対して cout の動作を変えたいと思います。たとえば、ハンドオーバーされた文字列の前に常に「Hello」が追加されます。したがって、これは基本的にオーバーロード演算子ですが、文字列用です。どうやってするの?
例
std::cout<<" Kermit";
結果
Hello Kermit
重複の可能性:
c++ で cout の動作をオーバーロードする方法
文字列に対して cout の動作を変えたいと思います。たとえば、ハンドオーバーされた文字列の前に常に「Hello」が追加されます。したがって、これは基本的にオーバーロード演算子ですが、文字列用です。どうやってするの?
例
std::cout<<" Kermit";
結果
Hello Kermit
しないでください:
struct X
{
X& operator << (const char* x)
{
std::cout << "Hello " << x;
return *this;
}
};
//...
X cout;
cout << "Kermit";
リテラルのラッパーを使用できます...
#include <iostream>
struct foo
{
foo(const char* s) : str(s) {}
friend
std::ostream& operator<<(std::ostream& s, foo const& f)
{ return s << "Hello " << f.str; }
const char* str;
};
int main(void)
{
std::cout << foo("Kermit") << std::endl;
}