Deklaracja C++ ciąg is the following:Czy jest jakiś użytek z basic_string <T> gdzie T nie jest typem znaku?
template<
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> class basic_string;
CharT
jest typ charakteru, który może być char
, wchar_t
, char16_t
i char32_t
; ale po wszystkim basic_string
jest szablonem, więc można go utworzyć z innymi CharT
i innymi podzielnikami. Choć może myślę, że w niektórych przypadkach użycie do innych podzielników nie jestem w stanie myśleć w przypadkach użycia ciągów innych typów danych, na przykład:
using string = std::basic_string<int>;
używając ciąg liczb całkowitych, nie możemy zainicjować go jako ciąg (oczywiste) ani struny u32 (nie takie oczywiste, przynajmniej dla mnie); ale możemy go zainicjować z initializer_list
dopóki zawarte typ listy jest zamienny do int
:
string err1("test"); // Error!
string err2(U"test"); // Error!
string err3{"test"}; // Error!
string err4{U"test"}; // Error!
string err5 = "test"; // Error!
string err6 = U"test"; // Error!
string success1({U't', U'e', U's', U't'});
string success2 = {U't', U'e', U's', U't'};
string success3({'t', 'e', 's', 't'});
string success4 = {'t', 'e', 's', 't'};
Ale nawet jeśli uda nam się zainicjować ciąg liczb całkowitych, nie możemy używać go w normalny sposób:
std::cout << success1; // Error! expected 116101115116
jedyny basic_string
oczekiwanego być używany z cout
są normalne te, które ma sens: w końcu nie możemy zakładać, jaki ma być wydrukowany ciąg liczb całkowitych lub ciąg MyFancyClass
es.
Ale w każdym razie tworzenie instancji dziwnych instancji basic_string
nie jest zabronione; z jednej strony nie jest zabronione ze względu na brak cech, które zabraniają takiego używania (aka koncepcje) i na innym kodowaniu jest łatwiejsze niż robienie tego w przeciwny sposób (bez pojęć), więc to mnie zastanawia. :
- Czy jest jakiś pożytek z
std::basic_string<T>
, gdzieT
nie jest typem znaku?
chodzi o Jakiekolwiek użycie myślę o rzeczach, które można osiągnąć tylko z ciągów T
i które nie mogą być wykonane z wektorem T
(czy będzie to znacznie trudniejsze do zrobienia), innymi słowy :
- Czy zdarzyło Ci się kiedyś, że lepszy wybór to ciąg
T
?
Czy możesz wymyślić coś, co string może zrobić lepiej niż wektor? – NathanOliver
@NathanOliver Printing? – BoBTFish
Czy nie jest to prawie to samo pytanie co "Co możesz zrobić z' std :: basic_string ', którego nie możesz zrobić z' std :: vector '?" –
user463035818