Определение строковых литералов-констант один раз как char const* и wchar const*C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Определение строковых литералов-констант один раз как char const* и wchar const*

Сообщение Anonymous »

Из-за ограничений домена, с которым я работаю, мне нужно определить строковые литералы как char const* и wchar const*, например:

Код: Выделить всё

constexpr auto C_VAR_NAME_1 = "MY_VAR_NAME_1";
constexpr auto C_VAR_NAME_2 = "MY_VAR_NAME_2";
...

constexpr auto W_VAR_NAME_1 = L"MY_VAR_NAME_1";
constexpr auto W_VAR_NAME_2 = L"MY_VAR_NAME_2";
...
У меня много констант, и я бы не хотел дважды определять одно и то же фактическое имя переменной (что может привести к некоторой опечатке и, следовательно, к несовпадающим именам), поэтому я использовал такой макрос:

Код: Выделить всё

#define WTEXT_IMPL(name) L##name
#define WTEXT(name)      WTEXT_IMPL(name)

#define MACRO_VAR_NAME_1 "MY_VAR_NAME_1"
#define MACRO_VAR_NAME_2 "MY_VAR_NAME_2"
...

constexpr auto C_VAR_NAME_1 = MACRO_VAR_NAME_1;
constexpr auto C_VAR_NAME_2 = MACRO_VAR_NAME_2;
...
constexpr auto W_VAR_NAME_1 = WTEXT(MACRO_VAR_NAME_1)
constexpr auto W_VAR_NAME_2 = WTEXT(MACRO_VAR_NAME_2)
...
Это работает, но, если возможно, я бы хотел избавиться от макросов; поэтому мой вопрос: можно ли добиться того же результата во время компиляции, используя простой стандарт C++ без макросов? Заранее благодарю за помощь.

Подробнее здесь: https://stackoverflow.com/questions/589 ... char-const
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»