|
Вопросы по С++ |
|
|
|
 |
Ответов
|
Apr 7 2006, 13:38
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(ig_z @ Apr 7 2006, 19:47)  1. Есть ли какая либо возможность узнать размер виртуальной таблицы методов для определенного класса? Средствами языка? Насколько знаю, нет, т.к. и сущности такой в языке нет - это технологическая вещь. Да и зачем? А если для интересу, то можно, во-первых, в листинге посмотреть, IAR, вроде, там показвает, сколько байтов резервирует для нее. Ну, и ее размер должен быть равен sizeof(указатель на функцию)*количество виртуальных функций. Цитата(ig_z @ Apr 7 2006, 19:47)  2. Как можно задать нужный размер enum в байтах? Раньне думал, что определяя последний елемент подобным образом
typedef enum {ev1,ev2,ev3,evNone = 0xFFFF} TPacketMessage;
получаю размер 2 байта, но похоже, что это не так Размер перечислимого типа зависит от реализации. Как правило, под него отводится минимальный целый тип, который может описать все значения. А сколько у Вас получилось в этом примере?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 7 2006, 14:47
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
Цитата(dxp @ Apr 7 2006, 16:38)  Цитата(ig_z @ Apr 7 2006, 19:47)  1. Есть ли какая либо возможность узнать размер виртуальной таблицы методов для определенного класса?
Средствами языка? Насколько знаю, нет, т.к. и сущности такой в языке нет - это технологическая вещь. Да и зачем? А если для интересу, то можно, во-первых, в листинге посмотреть, IAR, вроде, там показвает, сколько байтов резервирует для нее. Ну, и ее размер должен быть равен sizeof(указатель на функцию)*количество виртуальных функций. Цитата(ig_z @ Apr 7 2006, 19:47)  2. Как можно задать нужный размер enum в байтах? Раньне думал, что определяя последний елемент подобным образом
typedef enum {ev1,ev2,ev3,evNone = 0xFFFF} TPacketMessage;
получаю размер 2 байта, но похоже, что это не так Размер перечислимого типа зависит от реализации. Как правило, под него отводится минимальный целый тип, который может описать все значения. А сколько у Вас получилось в этом примере? Скажем у меня имеется два устройства и канал связи между ними. На одном конце я сериализую объект, в котором имеется указатель на функции члены. На другом конце выполняю десериализацию. Вот в этом месте хотелось бы выполнить проверку диапазона допустимости значений указателя на функции члены. Пример может надуманный, можно получить тот же эффект через свитч кейс, но как то некрасиво каждый раз рихтовать секцию свитч кейс. А вот енум в ИАР получился 2 байта, в МСВС - 4
|
|
|
|
|
Apr 7 2006, 15:13
|
Частый гость
 
Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631

|
Цитата(ig_z @ Apr 7 2006, 20:47)  Скажем у меня имеется два устройства и канал связи между ними. На одном конце я сериализую объект, в котором имеется указатель на функции члены. На другом конце выполняю десериализацию. Вот в этом месте хотелось бы выполнить проверку диапазона допустимости значений указателя на функции члены. Указатель на функцию-член класса в другом устройстве может быть неверным, т.к. распределение памяти под таблицы виртуальных методов, может не быть одинаковым, по крайней мере надеяться на это рискованно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|