C ++: ссылки и переносимость - PullRequest
0 голосов
/ 03 марта 2012

Я пишу плагин хоста.Когда плагин загружен, он получает указатель на таблицу функций.Иногда я хочу создать свободный интерфейс, например:

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. запрещено, поэтому нет необходимости поддерживать совместимость с C .
  4. Я бы хотел сохранить некоторые нажатия клавиш при наборе длинного кода.

Но,

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

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

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

...