Класс больших чисел, Инициализация

Я работаю над классом, который имеет дело с большими числами в C ++.

Дело в том, что я хочу, чтобы он мог выполнять нормальную инициализацию, например:

Largeint A = 1934804692305674830675460730458673084576;

Вместо того, чтобы поставить число между «».

Как мне добиться этого?

Редактировать из-за комментариев:

Я знаю, как работать с большими числами и делать с ними операции. То, о чем я просил, это то, что я просто не хочу, чтобы он тоже выглядел как строка при задании значения. Зачем? Просто так.

И если целочисленные литералы привязаны к настройкам компилятора, можно ли вообще обойти это?

Оба ответа интересны, а UDL классны: D Но есть ли способ использовать UDL без необходимости ставить суффикс в конце?

3

Решение

С 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;

Вы можете использовать более подходящее суффиксное имя.

2

Другие решения

Вы можете использовать макрос как это:

#define MakeLargeint(VAR, N) Largeint VAR = #N;

и определить LargeintКонструктор для получения строки.

Таким образом, ваша строка становится:

MakeLargeint(A ,1934804692305674830675460730458673084576)
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector