Объединение широкого строкового литерала со строковым макросом

У меня есть макрос для строки символов следующим образом:

#define APPNAME "MyApp"

Теперь я хочу построить широкую строку, используя этот макрос, выполнив что-то вроде:

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

Однако это приводит к ошибке компиляции "объединение несоответствующих строк".

Есть ли способ преобразовать макрос APPNAME в литерал широкой строки?


person flashk    schedule 06.11.2009    source источник
comment
Примечание. В C++0x есть новое правило для этого случая. §2.14.5/13: Если один строковый литерал не имеет префикса кодирования, он обрабатывается как строковый литерал того же префикса кодирования, что и другой операнд.   -  person Potatoswatter    schedule 09.08.2011


Ответы (1)


Ты пробовал

#define APPNAME "MyApp"

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

const wchar_t *AppProgID = WIDEN(APPNAME) L".Document";
person Marcel Gosselin    schedule 06.11.2009
comment
Да, но мне было интересно, есть ли способ сделать это без необходимости определять две версии макроса (широкую и неширокую). - person flashk; 06.11.2009
comment
Я обновил свой ответ, чтобы использовать некоторые общие методы препроцессора для работы со строками. Вы можете увидеть более сложные варианты использования, если заглянете на boost. org/doc/libs/1_40_0/libs/preprocessor/doc/index.html - person Marcel Gosselin; 06.11.2009