C++: ссылки и переносимость
Я пишу плагин хоста. Когда плагин загружен, он получает указатель на таблицу функций. Иногда я хочу создать свободный интерфейс, например так:
typedef struct{} *ht_MenuNode;
struct iMenuNode
{
struct iEditor
{
typedef iEditor *t_loopback;
t_loopback (*SetCaption) (const char *);
t_loopback (*AddChild) (ht_MenuNode Child);
// etc ...
ht_MenuNode (*GetHandle)();
};
iEditor * (*New) ();
iEditor * (*Edit) (ht_MenuNode);
// ...
};
Я хочу использовать ссылки на iEditor
вместо указателей, потому что
- Интерфейсные функции никогда не будут возвращать неверный указатель на
iEditor
, - По понятным причинам запрещается сохранять указатели на
iEditor
, - Нет необходимости поддерживать совместимость с Си.
- Я хотел бы сохранить некоторые нажатия клавиш при наборе длинного кода.
Но,
- Разные плагины на одной платформе могут быть скомпилированы с разными компиляторами.
Я никогда не видел примеров таблиц функций со ссылками.
iEditor & (*New) (); iEditor & (*Edit) (ht_MenuNode);
Итак, мой вопрос: передаются ли по ссылке и возвращаются по эталонной портативной технике?