6 / 6 / 0
Регистрация: 01.08.2012
Сообщений: 70
|
||||||
1 | ||||||
Union с явными указателями или void*- что выбрать?01.08.2012, 01:19. Показов 2340. Ответов 10
Метки нет (Все метки)
В программе предполагается использование огромного количества указателей типа void*, по которым будут хранится объекты типов А и Х. Т.о. при обращении будет использоваться явное приведение типа указателя. Но как вариант рассматриваю вместо void* использовать
0
|
01.08.2012, 01:19 | |
Ответы с готовыми решениями:
10
Void vs bool или что то похожие Что возвращает void, или различие между процедурами и функциями Void menu(void); что это ? почему не void menu(); delete или new (typeid(void*))(void*) |
6 / 6 / 0
Регистрация: 01.08.2012
Сообщений: 70
|
|
01.08.2012, 01:40 [ТС] | 3 |
У меня это работает, т.к. MS Visual Studio 2010 поддерживает многое из C++11. Активно пользуюсь такой штукой, как auto, например.
Вопрос открыт.
0
|
Jupiter
|
01.08.2012, 01:53
#4
|
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
01.08.2012, 01:57 | 5 |
void* в с++ достаточно нечасто используется, потому как это явное ослабление типизации времен си
ну это так, к слову не очень понятное преимущество перед использованием такого union'а union'ы обычно используют там, где по содержимому самого union'а можно определить какое его поле используется
0
|
6 / 6 / 0
Регистрация: 01.08.2012
Сообщений: 70
|
|
01.08.2012, 02:07 [ТС] | 6 |
За типизацией услежу, т.к. код малюсенький и надёжно изолирован кнутри класса.
Преимущество union'а - отсутствие необходимости делать каждый раз static_cast. Используй нужный указатель - и всё тут. Очень удобно. А знать, какое именно поле нужно использовать - не проблема в моём случае. Посему, вопрос производительности и эффективного использования памяти открыт.
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
01.08.2012, 02:14 | 7 |
Выбрать лучше то, в чём сам не запутаешься, пытаясь разобраться, что это творится в коде, недельки через две. То есть явное приведение типов, которое читается однозначно.
Фактически да, оно где-то так (плюс поправка на виртуальные функции) и происходит при приведении типов туда-сюда между родственными классами. Только dynamic_cast делает ещё проверку (в рантайме), что всё точно-точно окей. reinterpret_cast не делает, как и обычный C-style каст (X*)something. Конечно, запись foobar.asX читается приятнее, чем reinterpret_cast<X*>(foobar), но по-хорошему второй вариант является такой себе большой меткой «может случиться беда, если foobar не является X, будь предельно внимателен». Особенно, когда её приходится писать каждый раз. В идеале, конечно, лучше бы вообще от этого и всяких void* избавиться. Лучше оставить union для более очевидного применения — всяких а-ля динамических типов: Any/DynamicAny/Variant/как-его-там-ещё-называют.
1
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
01.08.2012, 02:16 | 8 |
проблем тогда никаких
в использовании union'ов для этого случая нет никакого overhead'a 1) по памяти будет занимать ровно один указатель 2) производительность не упадет, так как в с/с++ при обращении к union'у компилятор в compile-time знает к какому из полей
1
|
6 / 6 / 0
Регистрация: 01.08.2012
Сообщений: 70
|
|
01.08.2012, 02:29 [ТС] | 9 |
Спасибо за ответы. В принципе, для меня тема исчерпана. Ещё немного взвешу все за и против, и реализую то, что хотел. А всётаки "мозолящий глаз" reinterpret_cast - интересный вариант...
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
01.08.2012, 07:17 | 10 |
1
|
6 / 6 / 0
Регистрация: 01.08.2012
Сообщений: 70
|
|
01.08.2012, 09:27 [ТС] | 11 |
А меж тем... Логика ~OhMyGodSoLong~ мне очень понравилась, поэтому... Выбираю union Проект - самоделка, есть простор для экспериментов; если позже всплывут проблемы, будет мне урок.
0
|
01.08.2012, 09:27 | |
01.08.2012, 09:27 | |
Помогаю со студенческими работами здесь
11
Что значит void(*f)()=(void(*)()func? Что выбрать - Amd a8 3530mx или intel core i5 2450 или i7 2670qm? Что выбрать на данный момент, что рекомендуете: Веб или Андроид? Что лучше С++ 6 или С++ 2010 Что выбрать, мое мнение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |