55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
||||||
1 | ||||||
Указатель на void18.08.2013, 14:16. Показов 4243. Ответов 22
Метки нет (Все метки)
Как можно сделать универсальную функцию, которая принимает указатель на неопределенный тип, увеличивает значение на которое указывает этот самый указатель и возвращает его.
Что-то вроде этого (нерабочий вариант):
0
|
18.08.2013, 14:16 | |
Ответы с готовыми решениями:
22
Указатель типа void. Использование косвенного связывания через универсальный указатель Функция принимает указатель на void и возвращает указатель на int Указатель типа void Указатель void на структуру |
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||||||
18.08.2013, 14:18 | 2 | |||||
Видимо как-то так
0
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
18.08.2013, 14:21 [ТС] | 3 |
0x10, я уже думал про шаблоны. Но хочу именно через указатели void *.
Может есть какие варианты чтобы в функции узнать тип указателя?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
18.08.2013, 14:26 | 4 |
void* не используется в том контексте, где нужно знать тип. Это просто указатель на кусок памяти, без какой-либо информации о типе и однозначном способе ее узнать. Костыли с явной передачей типа, например, вторым аргументом не рассматриваю.
1
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||||
18.08.2013, 14:27 | 5 | |||||
BigLow, под не определенным типом вы подразумеваете какой-либо встроенный тип данных? Этот тип должен прежде всего поддерживать арифметические операции.
Если это так, то нужно сначала преобразовать в нужный тип, а затем выполнить увеличение и затем снова преобразовать в void.
1
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
18.08.2013, 14:32 [ТС] | 6 |
да, хотя бы для встроенных. Вот как узнать этот тип данных?
Чтобы преобразовать указатель в нужный тип, его сначала нужно узнать. А вот как узнать?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
18.08.2013, 14:38 | 7 |
1
|
Ушел с форума
|
|
18.08.2013, 14:51 | 8 |
BigLow, нельзя выполнить инкремент неизвестно чего.
1
|
18.08.2013, 23:57 | 12 |
Если не брать в расчет то, что вопрос ТС изначально поставлен не корректно,
то в качестве такого же не корректного ответа можно предложить следующее: кастить указатель к типу char ( (char *)ptr ) и увеличивать его ( *((char *)ptr) += x; ).
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
19.08.2013, 00:10 | 13 |
BigLow, если нужно что-то увеличивать, надо для начала узнать что это. А если даже предположить, что это целое, нужно еще знать и разрядность этого целого. Одно дело увеличить char, и совсем другое - int.
Не по теме: Пойди туда - не знаю куда, принеси то - не знаю что.
1
|
Комп_Оратор)
|
|
19.08.2013, 00:23 | 14 |
BigLow, увеличение указателя Type *ptr на 1 означает увеличение его значение на sizeof(Type) байт. Другими словами Ваш вопрос:
Сокращается до: можно ли по указателю на void узнать на какой тип, в действительности, он указывает? Ответ: нельзя. Потому что в действительности он указывает на байт. Более того, преобразовывая указатели к разным типам, можно обращаться к одному и тому же адресу, читая разные вещи, в представлении этих типов.
1
|
19.08.2013, 00:35 | 15 |
Не по теме: BigLow, на самом деле, перед Вами стоит какая-то конкретная задача? Добавлено через 12 минут Мне кажется (или не кажется а так и есть?), что самым простым и верным ответом будет ответ: Никак. Не по теме: Сам не пойму, почему мы разводим демагогию по этому поводу.. какая сила нами движет...? Может быть сила вредности? Которая стремит нас к высшей цепочке во множестве звеньев этой цепи?.. А может другая?...
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
19.08.2013, 00:40 | 16 |
castaway, конкретной задачи скорее всего не стоит. Просто чел осваивает конструкции языка, и в итоге рождаются такие вот нелогичные монстры. Из последних:
Как узнать в какой ОС запускается программа? Как стать программистом за 2 недели?
2
|
19.08.2013, 00:49 | 17 |
Tulosba, спасибо, тут я с тобой согласен, это очевидно. Тогда давайте посоветуем ТС умную книгу. Даже не книгу, а раздел им посвященный: Литература C++
Не по теме: P.S.: в моих словах нет ни капли иронии и отвращения к названию темы. Я говорил, так сказать, "от души". Исключительно только для того чтобы помочь новичкам. Поэтому прошу считать мои слова не оскорбительными.
1
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
19.08.2013, 09:18 [ТС] | 18 |
Я дико извиняюсь за неправильно поставленный вопрос. Просто где-то была тема про то как с помощью указателя на void создавался тип данных в который можно записывать любые значения. И вчера вечером мне помогли найти ее. Вот она Список С++
А это я сам вроде пытался что-то сделать, но направление не то было
0
|
26 / 26 / 0
Регистрация: 10.03.2010
Сообщений: 244
|
|
19.08.2013, 09:48 | 19 |
а VARIANT не подайдёт?
1
|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
19.08.2013, 11:17 [ТС] | 20 |
eXtream, хочется самому сделать такой класс, а не пользоваться готовым )
0
|
19.08.2013, 11:17 | |
19.08.2013, 11:17 | |
Помогаю со студенческими работами здесь
20
Указатель типа void c++ Арифметика указателей (указатель на void*) Обобщенный указатель типа void Чем плохой указатель на void? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |