J'ai une application MFC en C ++ qui utilise STD :: String et STD :: Wstring et se jette fréquemment de l'une à l'autre, et beaucoup d'autres non-sens. J'ai besoin de tout standardiser à un format unique, alors je me demandais si je devais aller avec cstring ou std :: wstring.
Dans l'application, je devrai générer des cordes d'une table à cordes, travailler avec beaucoup de Les appels Windows nécessitant des pointeurs de TCHAR ou WCHAR_T constants, modifier des contrôles, et interagissent avec l'API d'un objet COM nécessitant BSTR. P>
J'ai aussi des vecteurs de cordes, alors y a donc un problème avec un vecteur de cstrings?
lequel est le meilleur? Quels sont les avantages et les inconvénients de chacun? P>
Exemples B> P>
BSTR à wstring p> wstring to bstr p> ressource à chaîne à wstring p> getprofileString () renvoie une cssstring. P> Integer to String Format: P> wchar_t total[32];
swprintf_s(total, 32, L"%d", trk->getInt());
wstring tot(total);
3 Réponses :
std :: wstring serait beaucoup plus portable et bénéficierait de beaucoup de code prérogatoire existant dans STL et à Boost. CString irait probablement mieux avec Windows Api. P>
wchart_t: N'oubliez pas que vous pouvez obtenir les données de WSTRing à tout moment en utilisant la fonction Data (), vous obtenez donc le pointeur WCHAR_T indispensable de toute façon. P>
BSTR: Utilisez Sysallocstring pour sortir le BSTR d'un wstring.data (). P>
Quant à la dépendance de la plate-forme, rappelez-vous que vous pouvez utiliser J'irais pour Wstring tous les jours ... P> std :: basic_string
Mais avec Wstring, il est gênant de charger des ressources de chaîne par ID, ainsi que lorsque j'ai besoin d'obtenir des données dans un tampon LPC - je dois créer des tampons temporaires, obtenir les données, puis créer des wstrings d'eux.
Postez le code, et je le simplifierai;) - J'ai récemment dû travailler avec cela et avoir frustré par Cstrings aussi ...
std :: basique_string <> (ou plutôt ses spécialisations) est horrible de travailler avec, c'est l'OMI une des lacunes majeures de la STL (et je dirais C ++ en général). Cela ne sait même pas des codages - C'mon, c'est en 2010. Être capable de définir la taille de votre personnage ne suffit pas, car il n'y a aucun moyen d'indiquer des caractères de taille variable dans une base_string <>. Maintenant, UTF-8 n'est pas agréable de travailler avec un CRString, mais ce n'est pas aussi mauvais que d'essayer de le faire avec basic_string. Bien que je suis d'accord avec l'esprit des affiches ci-dessus qu'une solution standard est meilleure que les alternatives, CSSTRing est (si votre projet utilise de toute façon MFC ou ATL) beaucoup plus agréable à travailler avec STD :: String / Wstring: conversions entre ANSI / Unicode (à travers Cstringa et Cstringw), BSTR, chargement à partir de la table à cordes, opérateurs de distribution à TCHAR (.C_STR ()? Vraiment?), ... P>
CSSTRING a également format (), qui, bien que non sûr et quelque peu laid, est pratique. Si vous préférez des bibliothèques de formatage sécurisées, vous serez mieux à partir de basic_string. P>
En outre, CSSTLING a des algorithmes en tant que fonctions membres dont vous aurez besoin de renforcer les utilitaires de chaîne pour faire sur basic_string tels que la garniture, Split, etc. P>
Les vecteurs de CString ne sont pas un problème. P>
garde contre un licenciement dogmatique de CCString sur la base de celui-ci étant uniquement Windows: Si vous l'utilisez dans une interface graphique Windows, l'application est de toute façon seulement. Cela étant dit, s'il y a une chance que votre code soit nécessaire pour être une plate-forme interrogatoire à l'avenir, vous allez être bloqué avec Basic_string <>. p>
Les vecteurs de Cstring sont ok, mais vous pouvez également utiliser Cstringarray's.
i personnellement ira avec Comme vous l'avez noté, cstring code> S dans ce cas, puisque vous indiquez que vous travaillez avec
BSTR code> S, à l'aide de COM et d'écrire cela dans MFC. Alors que
wstring code> S serait plus conforme aux normes, vous rencontrerez des problèmes avec une conversion constante de l'une à l'autre. Puisque vous travaillez avec COM et l'écrir dans MFC, il n'y a aucune raison réelle de s'inquiéter de la rendant la plate-forme inter-plate-forme, car aucun autre système d'exploitation n'a que Windows et MFC vous bloque déjà dans Windows. P>
cstring code> S a également des fonctions intégrées pour aider à charger les chaînes et convertir en
BSTR code> S et similaire, tous pré-fabriqués et déjà conçus pour Travailler avec Windows. Donc, alors que vous devez normaliser sur un format, pourquoi ne pas faciliter le fonctionnement? P>
Dupliquer: stackoverflow.com/questions/485654/... Stackoverflow.com/Questtions/133364/...
N'était pas vraiment un duplicata - je voulais comparer les deux que j'ai donné mon cas particulier, qui avaient des avantages et des inconvénients pour les deux.