Juster
@Juster

Конвертация строковых литералов-идентификаторов в числа в compile time?

Существует ли на C++11 compile-time средство, которое конвертирует строковые литералы-идентификаторы в числовые идентификаторы?

Допустим, хочется иметь такие идентификаторы:
"MSG_ADD_OBJECT"
"MSG_REMOVE_OBJECT"
и т.п.
Но выделять память на строки не хочется, было бы здорово иметь такой макрос, который на этапе компиляции превратит строки в уникальные числа:
int64 a = NUM_ID("MSG_ADD_OBJECT");
int64 b = NUM_ID("MSG_REMOVE_OBJECT");
Если такое средство есть, то какая вероятность коллизии?
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Alexander1705
#define MSG_ADD_OBJECT 0
#define MSG_REMOVE_OBJECT 1

int64 a = MSG_ADD_OBJECT; // a = 0
int64 b = MSG_REMOVE_OBJECT; // b = 1


Второй вариант:
enum MSG {ADD_OBJECT, REMOVE_OBJECT};

// Можно использовать два варианта:
int64 a = ADD_OBJECT; // a = 0
int64 b = MSG::REMOVE_OBJECT; // b = 1
Ответ написан
Комментировать
@DancingOnWater
Это называется пользовательский литерал
habrahabr.ru/post/140357
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы