Предыстория.
Я пишу хост для плагинов. Когда плагин загружен, он получает указатель на таблицу функций. Иногда мне нужно построить "текучий интерфейс", типа такого:
cpp Код:
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);
// ...
};
По привычке я использую указатели, но в этом случае мне хотелось бы использовать ссылки, ибо
1. Функции этого интерфейса никогда не вернут невалидный указатель на
iEditor.
2. По очевидным причинам сохранять указатель на
iEditor недопустимо.
3.
Нет необходимости поддерживать совместимость с
Си.
4. Я не прочь сэкономить немного времени при наборе длинных текстов.
cpp Код:
iEditor & (*New) ();
iEditor & (*Edit) (ht_MenuNode);
Но:
1. Под одной и той же платформой плагины могут быть скомпилированы разными компиляторами.
2. Я не видел аналогичных интерфейсов, где бы использовались ссылки.
Поэтому меня терзают сомнения.
Собственно вопрос.
Передача-по-ссылке и возврат-по-ссылке — это портабельные приёмы?
Прописано ли это как-либо в стандарте?
До этого я задавал вопрос на стакЪоверфлов, но ответов вообще не получил, только смутные комментарии.