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 вместо указателей, потому что

  1. Интерфейсные функции никогда не будут возвращать неверный указатель на iEditor,
  2. По понятным причинам запрещается сохранять указатели на iEditor,
  3. Нет необходимости поддерживать совместимость с Си.
  4. Я хотел бы сохранить некоторые нажатия клавиш при наборе длинного кода.

Но,

  1. Разные плагины на одной платформе могут быть скомпилированы с разными компиляторами.
  2. Я никогда не видел примеров таблиц функций со ссылками.

    iEditor & (*New)  ();
    iEditor & (*Edit) (ht_MenuNode);
    

Итак, мой вопрос: передаются ли по ссылке и возвращаются по эталонной портативной технике?

0 ответов

Другие вопросы по тегам