вопрос по struct - что говорит стандарт c++
От: Shady Россия  
Дата: 08.10.04 18:16
Оценка:
Прошуршал гуглю и рсдн, но ответ не нашел:
Хочу сэмулировать 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
Re: вопрос по struct - что говорит стандарт c++
От: Павел Кузнецов  
Дата: 08.10.04 18:20
Оценка: 6 (1)
Shady:

>
> struct vtbl                    // vtbl какого класса, создается не ручками, а специальным парсером
> {
>     void (*method1)();
>     void (*method2)();
> }
>

> Я не знаю, структура распологается в c++ по стандарту плоско? (то есть все эти указатели идут друг за другом в памяти, не зависимо от выкидонов компилятора).

Да, один за одним. Нет, в том смысле, что между членами, в зависимости от компилятора, может быть добавлено "пустое" место для выравнивания.

> И вызов данных указателей на функции стандартен?


Нет.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: вопрос по struct - что говорит стандарт c++
От: Shady Россия  
Дата: 08.10.04 18:29
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:
Спасибо что так оперативно ответили (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++
От: Павел Кузнецов  
Дата: 08.10.04 19:08
Оценка:
Shady:

> То есть опять

>

> _vtbl->method1(); // _vtbl объект структуры vtbl

> в разных компиляторах будет падать? И значит я не смогу использовать данную структуру, собранную одним компилятором, вызывая её методы в другом?

В некоторых — сможешь. Надо смотреть на конкретные сочетания компиляторов.

> Но почему, это из-за выравнивания?


Плюс разные соглашения о вызове и т.п.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: вопрос по struct - что говорит стандарт c++
От: Shady Россия  
Дата: 08.10.04 19:27
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Плюс разные соглашения о вызове и т.п.

Идиотский вопрос: а разве нет соглашения о вызовах? Это опять таки не стандартизировано?
... << 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 Россия  
Дата: 08.10.04 19:28
Оценка:
S>Идиотский вопрос: а разве нет соглашения о вызовах? Это опять таки не стандартизировано?
Я имел ввиду единых соглашений о вызовах?
... << RSDN@Home 1.1.3 stable >>
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re[5]: вопрос по struct - что говорит стандарт c++
От: Павел Кузнецов  
Дата: 08.10.04 20:22
Оценка: 6 (1)
Shady:

> ПК>Плюс разные соглашения о вызове и т.п.

> Идиотский вопрос: а разве нет соглашения о вызовах? Это опять таки не стандартизировано?

Некоторые фактические соглашения на некоторых операционных системах есть, но гарантировать, что они есть везде, и что они одинаковы нельзя. Если речь о Windows, то при использовании cdecl и stdcall и некоторых ограничениях на используемые аргументы, "межкомпиляторные" вызовы должны работать.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[5]: вопрос по struct - что говорит стандарт c++
От: little_alex  
Дата: 10.10.04 10:32
Оценка: 4 (1)
Здравствуйте, Shady, Вы писали:


ПК>>Плюс разные соглашения о вызове и т.п.

S>Идиотский вопрос: а разве нет соглашения о вызовах? Это опять таки не стандартизировано?

Здесь есть стандарт описывающий детали на уровне достаточном для успешной линковки obj разных компиляторов.
К сожалению его придерживаются только компиляторы под Unix(Linux),впрочем он для этого и создавался.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.