Nel mio progetto ci sono un sacco di stringhe con significati diversi, allo stesso scopo, come:Come implementare le stringhe digitate in C++ 11?
std::string function_name = "name";
std::string hash = "0x123456";
std::string flag = "--configure";
voglio distinguere i diversi stringhe dal loro significato, da usare con sovraccarichi di funzioni:
void Process(const std::string& string_type1);
void Process(const std::string& string_type2);
Ovviamente, devo utilizzare diversi tipi:
void Process(const StringType1& string);
void Process(const StringType2& string);
Ma come attuare questi tipi in modo elegante? Tutto quello che posso venire è questo:
class StringType1 {
std::string str_;
public:
explicit StringType1(const std::string& str) : str_(str) {}
std::string& toString() { return str_; }
};
// Same thing with StringType2, etc.
Potete consigliare un modo più conveniente?
v'è alcun punto nelle funzioni di ridenominazione in quanto l'obiettivo principale è quello di non passare per errore un tipo stringa invece di un altro:
void ProcessType1(const std::string str);
void ProcessType2(const std::string str);
std::string str1, str2, str3;
// What should I pass where?..
_ "distinguere diverse stringhe per il loro significato" _ Potrebbe illustrare _their meaning_ per favore? Puzza un po 'di problema XY per me. –
Sì, è chiaramente un problema XY. È eccessivo avere proprie classi che incapsulano i dati in questo caso. Dai un'occhiata ai modelli di strategia. –
@ πάνταῥεῖ solo per dare un'occhiata - non è molto utile. Potrebbe essere possibile espandere l'utilizzo del modello suggerito a una risposta? –