Как создать пользовательский литерал для целочисленного типа со знаком?
Как я узнал из этого сообщения, типы параметров, разрешенные для определенного пользователем типа литерала, следующие:
const char*
unsigned long long int
long double
char
wchar_t
char16_t
char32_t
const char*, std::size_t
const wchar_t*, std::size_t
const char16_t*, std::size_t
const char32_t*, std::size_t
Ну, единственное целое число, которое я вижу в этом списке, char
, которое слишком мало. Что делать, если я хотел сделать что-то вроде этого:
str operator"" _i(int i) {
return i*2;
}
Тогда, когда я пишу -1000_i
, я ожидаю получить -2000
. Как это сделать?
Ответы
Ответ 1
Нет такой вещи, как отрицательный целочисленный литерал. -1000
- это применение унарного оператора -
к литералу 1000
.
Тогда, когда я пишу -1000_i
, я ожидаю получить -2000
. Как это сделать?
Определите 1000_i
таким образом, что применение унарного -
дает -2000
. Вы можете, например, сделать 1000_i
тип структуры с пользовательским перегруженным operator-
.