‘class std::vector<bool>’ has no member named ‘emplace_back’
-
Jetzt reichts, ich schreibe mir einen true_vector ohne diese dummen Spässe
Lebe damit! vector<bool> und deren Probleme sind lange bekannt und werden genauso wie auto_ptr nicht aus der Bibliothek herausgenommen.
Loesung: Benutze std::bitset oder boost::dynamic_bitset!
-
knivil schrieb:
Loesung: Benutze std::bitset oder boost::dynamic_bitset!
Welches vector<bool>-Problem wird denn von bitset gelöst, außer dass bitset nicht vorgaukelt, ein vector zu sein? (Abgesehen davon, dass der TE die Ersetzung umgekehrt möchte)
-
außer dass bitset nicht vorgaukelt, ein vector zu sein?
bitset gaukelt nicht vor, ein vector zu sein.

-
vector<fool> schrieb:
Und per Template bool mit char zu ersetzen geht leider nicht.
Hm??
std::conditional<std::is_same<T,bool>::value, char, T>::type
-
ScottZhang schrieb:
std::conditional<std::is_same<T,bool>::value, char, T>::typeNicht so knorke:
template<class T> class MyClass{ //... T& operator[](std::size_t i){ return elements[i]; } private: std::vector<typename std::conditional<std::is_same<T,bool>::value, char, T>::type> elements; };
-
Und der überladene Operator gibt dann wieder eine Referenz auf
boolzurück?
Falls tatsächlich das auslagern von
emplace_back(und anderen relevanten Funktionalitäten) in spezialisierbare Einheiten nicht möglich ist, gibt es nochtemplate<typename T> using Vector = std::vector< typename std::conditional<std::is_same<T,bool>::value, char, T>::type >;
-
Die eigentliche Frage ist doch, wieso bietet vector<bool> kein emplace_back an?
-
but why schrieb:
Die eigentliche Frage ist doch, wieso bietet vector<bool> kein emplace_back an?
wieder ein ballmer peak?
-
volkard schrieb:
but why schrieb:
Die eigentliche Frage ist doch, wieso bietet vector<bool> kein emplace_back an?
wieder ein ballmer peak?
Nein, sie haben Herr Bebel vor kurzem entlassen - habt ihr das nicht mitbekommen?
Es dachten die Experten vom Komitee, dass ein
emplace_backfürvector<bool>prinzipiell unnötig ist (Perfect Forwarding ist fürboolja tatsächlich Überflüssig).
-
Arcoth schrieb:
volkard schrieb:
but why schrieb:
Die eigentliche Frage ist doch, wieso bietet vector<bool> kein emplace_back an?
wieder ein ballmer peak?
Nein, sie haben Herr Bebel vor kurzem entlassen - habt ihr das nicht mitbekommen?
Es dachten die Experten vom Komitee, dass ein
emplace_backfürvector<bool>prinzipiell unnötig ist (Perfect Forwarding ist fürboolja tatsächlich Überflüssig).Naja, das Statement ist immernoch besser als der ganze Code, den Du nüchtern produzierst.
-
Die Spezialisierung radikal auskommentieren in der STL! Ohne wenn und aber, hier wird kurzer Prozess gemacht! Und dann dynamic_bitset hernehmen, um den ganzen boost-Firlefanz erleichtern, namespace anpassen und in den STL-Ordner schieben! Problem gelöst!
-
volkard schrieb:
Naja, das Statement ist immernoch besser als der ganze Code, den Du nüchtern produzierst.
video meliora proboque, deteriora sequor.

Edit:
Die Spezialisierung radikal auskommentieren in der STL! Ohne wenn und aber, hier wird kurzer Prozess gemacht!
Ja, das ist eine Möglichkeit. Bloß nicht, dass dann aber merkwürdige Fehler in anderen Stellen anderer Header kommen.
-
In welchen genau, ich hab's jetzt noch nicht probiert? Ich denke die Menge an zerstörtem Code, global gesehen, würde sich in überschaubarem Rahmen halten, aber ist nur so eine Vermutung. Und derjenige, der den Code geschrieben hat, hat's ja auch verdient... Wenn ich nen bitset haben will, dann nehme ich auch eins.
Wenn man den "Tag des vector<bool>" einführt, könnte man zudem auf die Problematik hinweisen.
-
Arcoth schrieb:
Und der überladene Operator gibt dann wieder eine Referenz auf
boolzurück?
du hast mehr oder weniger verstandn warum ich geschrieben hab: "nicht so knorke" aka: "Löst das Problem nicht" aka "verschiebt das Problem nur ein Ebene höher"
-
mal nicht so unkreativ, die Rede war von austauschen
template<class T> class MyClass{ typedef typename std::conditional<std::is_same<T,bool>::value, char, T>::type value_type; //... value_type& operator[](std::size_t i){ return elements[i]; } private: std::vector<value_type> elements; };
-
otze schrieb:
aka "verschiebt das Problem nur ein Ebene höher"
Jetzt muss halt der Benutzer von MyClass damit zurechtkommen, dass er keine bool& kriegt...
//edit nene, wenn typumleitung, dann auf einen anderen Container.
-
otze schrieb:
//edit nene, wenn typumleitung, dann auf einen anderen Container.
Oder einfach
struct not_a_bool { bool value; operator bool&(){return value;} };
-
otze schrieb:
otze schrieb:
aka "verschiebt das Problem nur ein Ebene höher"
Jetzt muss halt der Benutzer von MyClass damit zurechtkommen, dass er keine bool& kriegt...
//edit nene, wenn typumleitung, dann auf einen anderen Container.
Ich dachte bool und char sind implizit konvertierbar?
-
Ja, aber nicht die Referenzen. Und das aus gutem Grund.
-
Ah ok. Verätst du den Grund noch?