Chaîne de caractères.Format pour le C++
La recherche d'une implémentation en C++ d'une fonction comme .NET de la Chaîne.Format. Évidemment il y a le printf et ses variétés, mais je suis à la recherche de quelque chose qui est de position comme dans:
Chaîne.Format("Bonjour {0}. Vous êtes
{1} ans. Comment vous sentez-être
{1}?", nom, âge);
Cela est nécessaire parce que nous allons essayer de le rendre plus facile à localiser notre application, et de donner les traducteurs {0} et {1} à la position de n'importe où dans la phrase est beaucoup plus facile que de leur donner un %s, %d, %d, qui doivent être placés dans l'ordre dans leur traduction.
Je suppose, de la recherche et de la remplacer par la variable d'entrées (va_start, va_end, etc) est ce que je vais bâtiment, mais s'il existe déjà une solution solide, qui serait préférable.
Merci 🙂
Vous devez vous connecter pour publier un commentaire.
Regarder la boost format de la bibliothèque.
De QT QString vous permet de faire cela:
Croyez le ou non, printf et amis à l'appui des arguments de position.
Vous pourriez avoir un coup d'oeil à la FastFormat-bibliothèque.
Je pense que vous pouvez utiliser FastFormat, comme
qui est presque identique à la syntaxe.
Plusieurs options:
Sur une note connexe, de quoi vous parlez est tout à fait insuffisant pour la localisation.
Si vous allez écrire votre propre, de recherche et de remplacement n'est probablement pas la meilleure approche, car la plupart des rechercher/remplacer des méthodes ne permettent de remplacer une à une, et de faire un très mauvais travail permettant à l'escpae caractères (comme si vous voulez inclure la chaîne littérale
{0}
dans votre sortie.Vous êtes beaucoup mieux d'écrire votre propre finite-state machine à marcher à travers la chaîne d'entrée, la génération d'une chaîne de production à la volée en un seul passage. Cela permet de gérer les caractères d'échappement et de plus en plus compliqué de fonctions de sortie (comme les dates localisées
{0:dd\MM\yyyy}
par exemple). Il va vous donnent plus de flexibilité en plus d'être plus rapide qu'une recherche/remplacement ou une regex approche.iostream:
Vous pouvez mettre en forme comme sprintf (google pour "iostream format") et son dans le standard C++.
Cibler Windows? FormatMessage() est votre ami
Si vous devriez être multiplate-forme, alors je vote pour boost::format, ou peut-être l'unité de soins intensifs.
Si vous ne devez prendre en charge Windows, puis FormatMessage (ou la pratique du wrapper de cela, CString::FormatMessage, si vous utilisez MFC)
Pouvez prendre un coup d'oeil ici pour une comparaison: http://www.mihai-nita.net/article.php?artID=20060430a
Il y a quelques temps, j'ai essayé de faire quelque chose comme ça, mais avec quelques hypothèses:
Je n'ai pas réussi à ça, et c'est totalement fini, mais vous pouvez toujours regarder quelques résultats:
http://code.google.com/p/pileofcrap/source/browse/tests_format.cpp
http://code.google.com/p/pileofcrap/source/browse/format/Format.h
En plus des options proposées par les autres, je peux vous recommander le l'esf de la bibliothèque qui met en œuvre la chaîne de mise en forme similaire à
str.format
en Python etString.Format
en C#. Voici un exemple:La bibliothèque est entièrement sécurisé et est beaucoup plus rapide que Stimuler Format.
Disclaimer: je suis l'auteur de cette bibliothèque.