Есть ли такой тип?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Нужен целый беззнаковый тип с такими свойствами:
1. Разрядность должна быть гарантировано достаточна для представления любого возможного количества динамических переменных любого типа, даже однобайтных. Выделил память с помощью new по указателю на char и в этот тип, как в size должно гарантировано поместиться количество выделенных байтов. Без привязки к особенностям конкретной разновидности windows и её ограничений на фактически доступную прикладному процессу память. И без привязки к объёму физической памяти.
2. Но в то же время должно быть допустимо одновременное существование перегруженных версий функции с одним параметром, одна из которых принимает WPARAM, другая LPARAM, а третья - параметр искомого типа.
size_t удовлетворяет первому условию, но почему-то не удовлетворяет второму.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Вот в этом месте споткнулся и дальнейшее уже даже не пытался разобрать:
Сионист писал(а):1. Разрядность должна быть гарантировано достаточна для представления любого возможного количества динамических переменных любого типа, даже однобайтных.
А можно более простым языком? А то когда ты умными словами пытаешься объясняться, то тебя вообще понять нельзя.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Какое слово не видно?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сионист, мы с тобой это обсуждали уже несколько раз. Ты пишешь много слов и они все в отдельности понятны. Но ты их нагромождаешь без связи, и они превращаются в непроходимый бурелом. Я не хочу с тобой ругаться в очередной раз. Просто если тебе нужен ответ, то, пожалуйста, напиши вопрос максимально просто и на пальцах. Честное слово, я не придираюсь. Я действительно не могу его понять.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

/* Включаем телепата */

Если нужен вариант, то есть boost::any
2B OR NOT(2B) = FF
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Как я понимаю, ему нужен встроенный тип. Но, опять-таки, это всё догадки. Явно этого не сказано.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Тип variant мне не нужен. Мне нужно беззнаковое целое.
1. Раздность должна быть достаточна для хранения любого возможного количества безымянных динамических переменных.

Код: Выделить всё

int *p=new int [1000];
Здесь выделена память по указателю p. Для чего? В неё размещена тысяча переменных. Каждая из них в отдельности не имеет имени, то есть безымянна. Количество их может быть изменено в рантайме, то есть динамически. Вот эти два признака и важны: возможность динамического изменения количества и отсутствие имён каждой отдельной переменной. Мне нужен тип беззнакового целого, разрядность которого гарантированно достаточна для хранения любого возможного их количества. Но при этом не зависимо от конкретного типа самих динамических безымянных переменных, то есть если написать

Код: Выделить всё

double*p=new double [1000];
, или

Код: Выделить всё

char *p=new char [1000];
, то разрядность искомого беззнакового целого типа должна быть гарантированно достаточна для того, чтоб сосчитать и их. И может же быть не только тысяча, может быть и две тысячи и чёрт его знает, может быть станет возможным и миллиард, и триллион, и квадриллион и даже квинтилион. А вот если целевая платформа поддерживает адреса разрядность 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 на искомый тип, то эта перегрузка должна быть возможна.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сионист писал(а):Тип variant мне не нужен. Мне нужно беззнаковое целое.
1. Раздность должна быть достаточна для хранения любого возможного количества безымянных динамических переменных.

https://gmplib.org/
2B OR NOT(2B) = FF
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Из всего вышесказанного я понял, что придётся написать свой класс, использующий внутри себя байтовое представление числа (например динамеческий массив из char'ов) и реализовать для этого класса все необходимые операции. Ну, или, воспользоваться готовыми решениями из сторонних библиотек. В этом случае второй пункт требований так же будет выполнен, так как ссылка на этот класс не будет автоматически приводится к ссылке на WPARAM или LPARAM.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Как я понял из всего сказанного, ему нужен тип целого числа с разрядностью выше 32.
Это может быть long long или __int64 в Visual C++. У них разрядность 64 бита.
Можно ещё использовать __m128 в разных модификациях - это 128-битные числа.
Ответить