Страница 1 из 2
Есть ли такой тип?
Добавлено: 25 ноя 2015, 08:00
Сионист
Нужен целый беззнаковый тип с такими свойствами:
1. Разрядность должна быть гарантировано достаточна для представления любого возможного количества динамических переменных любого типа, даже однобайтных. Выделил память с помощью new по указателю на char и в этот тип, как в size должно гарантировано поместиться количество выделенных байтов. Без привязки к особенностям конкретной разновидности windows и её ограничений на фактически доступную прикладному процессу память. И без привязки к объёму физической памяти.
2. Но в то же время должно быть допустимо одновременное существование перегруженных версий функции с одним параметром, одна из которых принимает WPARAM, другая LPARAM, а третья - параметр искомого типа.
size_t удовлетворяет первому условию, но почему-то не удовлетворяет второму.
Re: Есть ли такой тип?
Добавлено: 25 ноя 2015, 13:05
Romeo
Вот в этом месте споткнулся и дальнейшее уже даже не пытался разобрать:
Сионист писал(а):1. Разрядность должна быть гарантировано достаточна для представления любого возможного количества динамических переменных любого типа, даже однобайтных.
А можно более простым языком? А то когда ты умными словами пытаешься объясняться, то тебя вообще понять нельзя.
Re: Есть ли такой тип?
Добавлено: 25 ноя 2015, 13:09
Сионист
Какое слово не видно?
Re: Есть ли такой тип?
Добавлено: 25 ноя 2015, 13:45
Romeo
Сионист, мы с тобой это обсуждали уже несколько раз. Ты пишешь много слов и они все в отдельности понятны. Но ты их нагромождаешь без связи, и они превращаются в непроходимый бурелом. Я не хочу с тобой ругаться в очередной раз. Просто если тебе нужен ответ, то, пожалуйста, напиши вопрос максимально просто и на пальцах. Честное слово, я не придираюсь. Я действительно не могу его понять.
Re: Есть ли такой тип?
Добавлено: 25 ноя 2015, 13:56
Absurd
/* Включаем телепата */
Если нужен вариант, то есть boost::any
Re: Есть ли такой тип?
Добавлено: 25 ноя 2015, 14:30
Romeo
Как я понимаю, ему нужен встроенный тип. Но, опять-таки, это всё догадки. Явно этого не сказано.
Re: Есть ли такой тип?
Добавлено: 25 ноя 2015, 14:43
Сионист
Тип variant мне не нужен. Мне нужно беззнаковое целое.
1. Раздность должна быть достаточна для хранения любого возможного количества безымянных динамических переменных.
Здесь выделена память по указателю p. Для чего? В неё размещена тысяча переменных. Каждая из них в отдельности не имеет имени, то есть безымянна. Количество их может быть изменено в рантайме, то есть динамически. Вот эти два признака и важны: возможность динамического изменения количества и отсутствие имён каждой отдельной переменной. Мне нужен тип беззнакового целого, разрядность которого гарантированно достаточна для хранения любого возможного их количества. Но при этом не зависимо от конкретного типа самих динамических безымянных переменных, то есть если написать
, или
, то разрядность искомого беззнакового целого типа должна быть гарантированно достаточна для того, чтоб сосчитать и их. И может же быть не только тысяча, может быть и две тысячи и чёрт его знает, может быть станет возможным и миллиард, и триллион, и квадриллион и даже квинтилион. А вот если целевая платформа поддерживает адреса разрядность 32 бита, то больше 4*294*967*295 байт, а значит и переменных она адресовать принципиально не способна, значит в версии программы для такой платформы искомый тип может иметь разрядность 32 бита, так как их будет гарантировано достаточно, но в версии для win64 достаточность 32-х бит уже не гарантирована для хранения количества переменных, ведь можно выделить и 7 гигов под переменные типа char, их количество будет 7 миллиардов. Но надо, чтоб имя типа можно было не менять с ростом разрядность целевой платформы.
2. Если написать
Код: Выделить всё
void f(const WPARAM &x);
void f(const LPARAM &x);
void f(const size_t &x);
, то среда ругается на такую перегрузку. Если же заменить size_t на искомый тип, то эта перегрузка должна быть возможна.
Re: Есть ли такой тип?
Добавлено: 25 ноя 2015, 15:01
Absurd
Сионист писал(а):Тип variant мне не нужен. Мне нужно беззнаковое целое.
1. Раздность должна быть достаточна для хранения любого возможного количества безымянных динамических переменных.
https://gmplib.org/
Re: Есть ли такой тип?
Добавлено: 25 ноя 2015, 15:51
Romeo
Из всего вышесказанного я понял, что придётся написать свой класс, использующий внутри себя байтовое представление числа (например динамеческий массив из char'ов) и реализовать для этого класса все необходимые операции. Ну, или, воспользоваться готовыми решениями из сторонних библиотек. В этом случае второй пункт требований так же будет выполнен, так как ссылка на этот класс не будет автоматически приводится к ссылке на WPARAM или LPARAM.
Re: Есть ли такой тип?
Добавлено: 25 ноя 2015, 16:21
WinMain
Как я понял из всего сказанного, ему нужен тип целого числа с разрядностью выше 32.
Это может быть long long или __int64 в Visual C++. У них разрядность 64 бита.
Можно ещё использовать __m128 в разных модификациях - это 128-битные числа.