Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
контроль типов С++ |
Философия, технологии, алгоритмы! |
|
|
Опции темы |
20.03.2008, 11:57 | #1 | |
Форумец
Сообщений: 1,149
Регистрация: 18.09.2006
Возраст: 40
Не в сети |
контроль типов С++
есть такой код:
Цитата:
можно действовать "как в школе учили".... но есть такое ощущение, что это можно исправить с помощью какихто галочек в компиляторе...вопрос: каких? |
|
20.03.2008, 13:23 | #4 | ||
Форумец
Сообщений: 1,149
Регистрация: 18.09.2006
Возраст: 40
Не в сети |
Цитата:
ща попробывал и правда все ровно...это не может не радовать попытка 2 Цитата:
|
||
20.03.2008, 15:16 | #7 | |
Форумец
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42
Не в сети |
Цитата:
|
|
20.03.2008, 15:25 | #8 | |||
Форумец
Сообщений: 1,149
Регистрация: 18.09.2006
Возраст: 40
Не в сети |
кстате интересно как будет красивее
Цитата:
Цитата:
Цитата:
|
|||
20.03.2008, 16:40 | #10 | |
Форумец
Сообщений: 1,149
Регистрация: 18.09.2006
Возраст: 40
Не в сети |
Цитата:
допустим большая пачка указателей ,всяких разных типов, лежит где нибуть в массиве/списке.... в конце концов void* не просто же так придумали |
|
20.03.2008, 17:01 | #11 |
Форумец
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42
Не в сети |
а ты представь что ты про него не знаеш и не используй его будет код понятнее и красивее
указатели на коекакие хитрые классы нельзя получить обратно из void* т.е. среди предков CMyClass есть CParentMyClass. CMyClass * OrigClass = ...; void * p = OrigClass; ... CParentMyClass* ReferenceClass = (CParentMyClass*)( p ); может получиться так что ReferenceClass будет указывать совсем не тудаже куда и OrigClass. не спасёт даже и dynamic_cast. ps пример может и не очень удачный, но суть в том что при хитром множественном виртуальном наследовании будут глюки при присваивании к void* а потом обратно. |
20.03.2008, 17:48 | #12 | ||
Форумец
Сообщений: 1,149
Регистрация: 18.09.2006
Возраст: 40
Не в сети |
Цитата:
Цитата:
на счет возможности\невозможности отрубить контроль типов, вопрос открыт |
||
20.03.2008, 18:06 | #13 | |
аццкий троглодит
Сообщений: 3,236
Регистрация: 28.02.2004
Возраст: 39
Не в сети |
аргумент функции типа указатель на воид очень напоминает потоки посикс.
преобразовывается туда-обратно все ок. че угодно можно запихать и потом в функции получить. имхо, для того и сделан такой аргумент Цитата:
------------- добавлено например: { CMyClass obj1 ( ....... ); func ( ( void * ) & obj1 ); } void * func ( void * mes ) { CMyClass obj1 = * ( ( CMyClass * ) mes ); } |
|
20.03.2008, 18:09 | #14 |
Форумец
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42
Не в сети |
пример который показывает для чего нужен контроль типов если его "отключить" то получится не с++.
void* _offScript(void* v) { ... } void* _offScript(LISTSCRIPT* v) { ... } LISTSCRIPT* a = new LISTSCRIPT; _offScript( a ); |
20.03.2008, 18:14 | #17 |
Форумец
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42
Не в сети |
я уверен что ( при желании ) любую такую задачу где хочется заюзать преобразование к void* а потом преобразование обратно можно решить не используя void*.
это из тойже оперы что и использование goto - если религия позволяет, то используют, если нет - то не используют. |
20.03.2008, 18:16 | #18 | |
Форумец
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42
Не в сети |
Цитата:
|
|
20.03.2008, 19:09 | #21 | |
Форумец
Сообщений: 1,149
Регистрация: 18.09.2006
Возраст: 40
Не в сети |
Цитата:
|
|
21.03.2008, 11:06 | #23 | ||
Форумец
Сообщений: 1,149
Регистрация: 18.09.2006
Возраст: 40
Не в сети |
Цитата:
Цитата:
последний не ясный вопрос: как будет красивее? (*((LISTSCRIPT**)v))=((*((LISTSCRIPT**)v))->pNext)->pNext; или LISTSCRIPT** temp = (LISTSCRIPT**)v; *temp=((*temp)->pNext)->pNext; |
||
25.03.2008, 22:03 | #27 |
Форумец
Сообщений: 1,149
Регистрация: 18.09.2006
Возраст: 40
Не в сети |
отладчик в vs2005
struct MyType
{ int b; bool c; char d; float e; }; ......... тут код ......... MyType* Х = new MyType; void* У = new MyType; ......... тут код ......... тут брекпоинт, отладчиком могу посмотреть все значения структуры на которую указывает Х, естественно студия не знает на что указывает У, так как void* если я точно знаю реальный тип переменной У, есть ли возможность обьяснить это отладчику? зы: смотреть значение из памяти - жестокий метод... |
25.03.2008, 22:07 | #28 |
Форумец
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42
Не в сети |
в строке отладчика напеши (MyType*)У
ps не юзай в коде void* и будет тебе счастье. если тебе его нужно передать в какуюто процедуру в виде параметра void* то указатель на класс сам сконвертится в void*, но изза этого использовать внутри твоей процедуры void* не удобно, не красиво и не нужно. |
26.03.2008, 11:45 | #30 | ||||
Форумец
Сообщений: 1,149
Регистрация: 18.09.2006
Возраст: 40
Не в сети |
Цитата:
Цитата:
Цитата:
теперь по поводу вопроса: Цитата:
зы: пока делаю деревенским методом, собственной разработки(с) где то в программе вписана MyType* debugVar; когда мне надо глянуть значение, в debugVar вбиваю нужный адрес, и все красиво смотрица |
||||