2009-11-06 68 views
2

我有一個字符串的宏如下:結合寬字符串字面量字符串宏

#define APPNAME "MyApp" 

現在我想通過做一些像使用宏來構造一個寬字符串:

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

但是,這會生成「連接不匹配的字符串」編譯錯誤。

有沒有辦法將APPNAME宏轉換爲寬字符串?

+0

注:的C++ 0x有這種情況下,新的「做正確的事」的規則。 §2.14.5/ 13:「如果一個字符串文字沒有編碼前綴,它將被視爲與其他操作數具有相同編碼前綴的字符串文字。」 – Potatoswatter 2011-08-09 11:22:02

回答

7

你嘗試

#define APPNAME "MyApp" 

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

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

是的,但我想知道是否有這樣做的方式,而不必定義宏的兩個版本(寬和非寬)。 – flashk 2009-11-06 20:19:17

+0

工程就像一個魅力,謝謝! – flashk 2009-11-06 20:37:56

+0

我已經更新了我的答案,使用了一些常見的預處理器技術來處理字符串。如果您查看http://www.boost.org/doc/libs/1_40_0/libs/preprocessor/doc/index.html,可以看到更高級的用法 – 2009-11-06 20:39:12