bitset to_string() funktioniert nicht!?
-
hi sitze hier an einem linux system mit g++ und versuch
char tmp= 'c'; string input=""; std::bitset<8> a_bitset(tmp); input+=a_bitset.to_string();zum laufen zu bringen, bekomme aber als fehlermeldung:
error: no matching function for call to `std::bitset<8u>::to_string()'
hääääääääää??
also header sind drin, ich kann ja auch cout<<a_bitset; machen
nun brauche ich das aber eben in meinem string input
danke für hilfe
cu
andy
-
Du kannst es einerseits mit Stringstreams probieren, andererseits kannst du auch das Member-Template explizit aufrufen:
So in etwa (bin mir nicht ganz sicher):
std::stringstream s (input); s << a_bitset; input = s.str ();oder so:
a_bitset.template to_string<char, std::char_traits<char>, std::allocator<char> > ()http://www.sgi.com/tech/stl/bitset.html schrieb:
template<class Char, class Traits, class Alloc>
basic_string<Char,Traits,Alloc> to_string() constReturns a string representation of *this: each character is 1 if the corresponding bit is set, and 0 if it is not. In general, character position i corresponds to bit position N - 1 - i. Note that this member function relies on two language features, member templates and explicit function template argument specification, that are not yet universally available; this member function is disabled for compilers that do not support those features. Note also that the syntax for calling this member function is somewhat cumbersome. To convert a bitset b to an ordinary string, you must write
b.template to_string<char, char_traits<char>, allocator<char> >()
Aber eigentlich sollte das auch so klappen. Welche Version hast du?
-
.filmor schrieb:
oder so:
a_bitset.template to_string<char, std::char_traits<char>, std::allocator<char> > ()Das wäre nur nötig, wenn a_bitset ein abhängiger Name wäre, was hier eindeutig nicht der Fall ist. Aus diesem Grund kann das template entfallen.
Die explizite Angabe der Templateparameter hingegen ist notwendig, da sie aufgrund mangelnder Funktionsargumente nicht hergeleitet werden können.
-
Template-Argumente sollten doch eigentlich auch über den Rückgabewert herauszukriegen sein (Stichwort SFINAE)?!
-
.filmor schrieb:
Template-Argumente sollten doch eigentlich auch über den Rückgabewert herauszukriegen sein (Stichwort SFINAE)?!
Schönes Stichwort, hat nur nix mit Template-Argument-Deduction zu tun. SFINAE gehört in den Bereich Überladungsauflösung (Bestimmung der Kandidatenmenge). Das ist eine ganz andere Baustelle. Und nein: Template-Argumente werden nicht über den Rückgabewert hergeleitet. Das Verhalten von Template-Conversion-Operatoren suggeriert dies vielleicht aber das ist am Ende doch wieder was anderes

-
danke, das mit den templateparamtern geht dann ...
cu
-
Warum haben die das nicht so gemacht das a_bitset.to_string<char> reicht? Warum muss man char_traits und allocator auch noch angeben?
-
Ich sehe gerade das der FAQ-Eintrag bezüglich to_string falsch ist. Die Template-Parameter werden nicht angegeben.
-
hmmmmmmmmm schrieb:
Ich sehe gerade das der FAQ-Eintrag bezüglich to_string falsch ist. Die Template-Parameter werden nicht angegeben.
Danke, ist korrigiert.