Я работаю над классом, который имеет дело с большими числами в C ++.
Дело в том, что я хочу, чтобы он мог выполнять нормальную инициализацию, например:
Largeint A = 1934804692305674830675460730458673084576;
Вместо того, чтобы поставить число между «».
Как мне добиться этого?
Редактировать из-за комментариев:
Я знаю, как работать с большими числами и делать с ними операции. То, о чем я просил, это то, что я просто не хочу, чтобы он тоже выглядел как строка при задании значения. Зачем? Просто так.
И если целочисленные литералы привязаны к настройкам компилятора, можно ли вообще обойти это?
Оба ответа интересны, а UDL классны: D Но есть ли способ использовать UDL без необходимости ставить суффикс в конце?
С C ++ 11 мы можем создавать пользовательские литералы
Largeint operator "" _largeint(const char* literal_string)
{
Largeint largeint;
// initialize largeint with literal string content;
return largeint;
}
или, если вы предпочитаете шаблон Variadic
template<char... Cs> Largeint operator "" _largeint();
И затем используйте это:
Largeint largeint = 123456789012345678901234567890_largeint;
Вы можете использовать более подходящее суффиксное имя.
Вы можете использовать макрос как это:
#define MakeLargeint(VAR, N) Largeint VAR = #N;
и определить Largeint
Конструктор для получения строки.
Таким образом, ваша строка становится:
MakeLargeint(A ,1934804692305674830675460730458673084576)