реклама на сайте
подробности

 
 
> Вопросы по С++
ig_z
сообщение Apr 7 2006, 12:47
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



1. Есть ли какая либо возможность узнать размер виртуальной таблицы методов для определенного класса?

2. Как можно задать нужный размер enum в байтах? Раньне думал, что определяя последний елемент подобным образом

typedef enum {ev1,ev2,ev3,evNone = 0xFFFF} TPacketMessage;

получаю размер 2 байта, но похоже, что это не так
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Apr 7 2006, 13:38
Сообщение #2


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 байта, но похоже, что это не так

Размер перечислимого типа зависит от реализации. Как правило, под него отводится минимальный целый тип, который может описать все значения. А сколько у Вас получилось в этом примере?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
ig_z
сообщение Apr 7 2006, 14:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Shamil
сообщение Apr 7 2006, 15:13
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



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

Указатель на функцию-член класса в другом устройстве может быть неверным,
т.к. распределение памяти под таблицы виртуальных методов, может не быть
одинаковым, по крайней мере надеяться на это рискованно.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01403 секунд с 7
ELECTRONIX ©2004-2016