ページ 1 / 1
ostream から const char* に変換したい
Posted: 2011年11月12日(土) 19:20
by MoNoQLoREATOR
void function(const char * str){}
ostringstream oss;
function(oss<<"abc");
なんてことができたら便利だなと思ったのですが、<<演算子を使うとstd::basic_ostream<_Elem,_Traits>が返される上に、これをstringやconst char*に変換することができません。どうすればよいでしょうか?
Re: ostream から const char* に変換したい
Posted: 2011年11月12日(土) 19:47
by beatle
コード:
void f(const char* s);
ostringstream oss;
f(dynamic_cast<ostringstream&>(oss << "abc").str().c_str());
こんな感じにできます。
Re: ostream から const char* に変換したい
Posted: 2011年11月12日(土) 22:48
by たかぎ
いっそのこと...
コード:
template <class charT, class traits, class T>
inline T& put(std::basic_ostream<charT, traits>& os, T& value)
{
os << value;
return value;
}
上のような関数を作っておいて、
コード:
function(put(oss, "abc"));
のようにした方が便利ではないですか?
Re: ostream から const char* に変換したい
Posted: 2011年11月13日(日) 01:31
by MoNoQLoREATOR
自動的に変換されるように、グローバルな演算子オーバーロードを定義しようと思ったのですが、エラーが出てしまいました。グローバルな演算子オーバーロードを定義する際は第1引数に「属することになるクラス」を指定する必要があるそうですが、この場合どのように指定すべきなのでしょうか?
コード:
template <class charT, class traits, class T>
operator const char* (const basic_ostream<charT, traits> &os){
return (dynamic_cast<ostringstream&> os).str().c_str();
}
エラー内容
コード:
'operator const char *' は静的でないメンバでなければなりません
Re: ostream から const char* に変換したい
Posted: 2011年11月13日(日) 08:41
by beatle
MoNoQLoREATOR さんが書きました:エラー内容
コード:
'operator const char *' は静的でないメンバでなければなりません
このエラーが言うとおり、型変換演算子 operator const char* ()は、何かしらのクラスのメンバである必要があります。グローバルにはできない演算子なのです。
どうしてもbasic_ostreamにこの演算子を導入したければ、C++標準化委員会に提案して、basic_ostreamの定義を変えてもらいましょう。