Прошуршал гуглю и рсдн, но ответ не нашел:
Хочу сэмулировать vtbl классов, но шоб "компиляторно-независимо" Не хочеться пологаться на ms с её com интерфейсами, так что интересует
struct vtbl // vtbl какого класса, создается не ручками, а специальным парсером
{
void (*method1)();
void (*method2)();
}
Я не знаю, структура распологается в c++ по стандарту плоско? (то есть все эти указатели идут друг за другом в памяти, не зависимо от выкидонов компилятора). И вызов данных указателей на функции стандартен?
Заранее спасибо за ответы!
... << RSDN@Home 1.1.3 stable >>
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
> Я не знаю, структура распологается в c++ по стандарту плоско? (то есть все эти указатели идут друг за другом в памяти, не зависимо от выкидонов компилятора).
Да, один за одним. Нет, в том смысле, что между членами, в зависимости от компилятора, может быть добавлено "пустое" место для выравнивания.
> И вызов данных указателей на функции стандартен?
Нет.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: вопрос по struct - что говорит стандарт c++
Здравствуйте, Павел Кузнецов, Вы писали:
Спасибо что так оперативно ответили (4 минуты)
ПК>Да, один за одним. Нет, в том смысле, что между членами, в зависимости от компилятора, может быть добавлено "пустое" место для выравнивания.
Понятно.
>> И вызов данных указателей на функции стандартен? ПК>Нет.
То есть опять
_vtbl->method1(); // _vtbl объект структуры vtbl
в разных компиляторах будет падать? И значит я не смогу использовать данную структуру, собранную одним компилятором, вызывая её методы в другом? Но почему, это из-за выравнивания?
... << RSDN@Home 1.1.3 stable >>
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re[3]: вопрос по struct - что говорит стандарт c++
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Плюс разные соглашения о вызове и т.п.
Идиотский вопрос: а разве нет соглашения о вызовах? Это опять таки не стандартизировано?
... << RSDN@Home 1.1.3 stable >>
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re[5]: вопрос по struct - что говорит стандарт c++
Shady:
> ПК>Плюс разные соглашения о вызове и т.п. > Идиотский вопрос: а разве нет соглашения о вызовах? Это опять таки не стандартизировано?
Некоторые фактические соглашения на некоторых операционных системах есть, но гарантировать, что они есть везде, и что они одинаковы нельзя. Если речь о Windows, то при использовании cdecl и stdcall и некоторых ограничениях на используемые аргументы, "межкомпиляторные" вызовы должны работать.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[5]: вопрос по struct - что говорит стандарт c++
ПК>>Плюс разные соглашения о вызове и т.п. S>Идиотский вопрос: а разве нет соглашения о вызовах? Это опять таки не стандартизировано?
Здесь есть стандарт описывающий детали на уровне достаточном для успешной линковки obj разных компиляторов.
К сожалению его придерживаются только компиляторы под Unix(Linux),впрочем он для этого и создавался.