2009-11-06 4 views
2

J'ai une macro pour une chaîne de caractères comme suit:La combinaison de grande chaîne littérale avec chaîne de macro

#define APPNAME "MyApp" 

Maintenant, je veux construire une grande chaîne en utilisant cette macro en faisant quelque chose comme:

const wchar_t *AppProgID = APPNAME L".Document"; 

Toutefois, cela génère une erreur de compilation "Concaténation des chaînes incompatibles".

Existe-t-il un moyen de convertir la macro APPNAME en chaîne littérale large?

+0

Note: C++ 0x a une nouvelle règle "faire la bonne chose" pour ce cas. §2.14.5/13: "Si un littéral de chaîne n'a pas de préfixe de codage, il est traité comme un littéral de chaîne ayant le même préfixe de codage que l'autre opérande." – Potatoswatter

Répondre

7

Avez-vous essayé

#define APPNAME "MyApp" 

#define WIDEN2(x) L ## x 
#define WIDEN(x) WIDEN2(x) 

const wchar_t *AppProgID = WIDEN(APPNAME) L".Document"; 
+0

Oui, mais je me demandais s'il y avait une façon de le faire sans avoir à définir deux versions de la macro (large et non-large). – flashk

+0

Fonctionne comme un charme, merci! – flashk

+0

J'ai mis à jour ma réponse pour utiliser une technique de préprocesseur commune pour traiter les chaînes. Vous pouvez voir des utilisations plus avancées si vous regardez http://www.boost.org/doc/libs/1_40_0/libs/preprocessor/doc/index.html –

Questions connexes