初めて質問させていただきます ouh と申します。
std::bitset を使ってみようとしたところちょっとわからないことが
出てしまいました。VC++ 6.0 では以下のコードをコンパイルできます。
#include <iostream>
#include <string>
#include <bitset>
int main() {
std::bitset<4> b((unsigned long)4);
std::string s = b.to_string();
std::cout << s << std::endl;
return 0;
}
ところが、VC++ .net 2003 や BCC5.5 ではエラーになってコンパイル
できません。VC++ .net 2003 では以下のようなエラーがでます。
ただし VC上でコンパイルしようとしたのではなく、cmd.exe で
cl -GX xxx.cpp
(BCC5.5では bcc32 xxx.cpp)
と打っています。
error C2783: 'std::basic_string<_Elem,_Traits,_Ax>
std::bitset<_Bits>::to_string(void) const' : '_Elem'
用のテンプレートの引数を減少できませんでした。
もしかして to_string() というのは古いものでいまでは使われない
といいますかサポートされないのでしょうか?
それとも上に載せましたコードは完全に間違ったコードなのでしょう
か?
こちらの過去ログを調べましたら、以下のようにすればいい、という
ことはわかりましたので何も差し支えはないのですが気になります。
std::ostringstream oss;
oss << b;
std::cout << oss.str() << std::endl;
または出力したいだけなら
std::cout << b << std::endl;
簡単でいいのですが...
to_string() の件についてどなたか教えていただけないでしょうか?
よろしくお願いいたします。
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/vcstdlib/html/vclrfbitsettostring.asp
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-
8&q=bitset+to_string&num=50
非テンプレートメンバ関数版は、テンプレートメンバ関数をサポートしてない処理系の場合のよ
うです。
std::string s = b.to_string< char,std::char_traits<char>,std::allocator<char> >
();
まさかこんなに早くレスをいただけるとは思っておりませんでしたので
BS2でのんびり『男はつらいよ』など見ておりました。すみません。
es様、επιστημη様、ありがとうございます。
お教えいただいた MSDN Library のところ拝見しました。
BCC5.5で確かに
std::string s = b.to_string< char,std::char_traits<char>,std::allocator<char> >
();
をコンパイルできました。
VC++ 6.0 でコンパイルできるかどうかは月曜日に会社に行かないと確認
できませんが通るはずですね。
納得です。
これで解決とさせていただきます。
すみません、VC++ 6.0 では
std::string s = b.to_string();
で通るんでした。
VC++ .net 2003 で今確認いたしました。