Re: Ссылки VS портабельность
От: Centaur Россия  
Дата: 05.03.12 05:30
Оценка: 2 (1)
Здравствуйте, Shadows In Rain, Вы писали:

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


SIR>По привычке я использую указатели, но в этом случае мне хотелось бы использовать ссылки


SIR>Но:

SIR>1. Под одной и той же платформой плагины могут быть скомпилированы разными компиляторами.

В том числе, компиляторами с разных языков.

SIR>3. Нет необходимости поддерживать совместимость с Си.


Есть. Потому что все остальные языки в части interoperability оглядываются только и исключительно на C.

SIR>Собственно вопрос.

SIR>Передача-по-ссылке и возврат-по-ссылке — это портабельные приёмы?

Нет, поскольку ABI платформы не обязательно специфицирует ссылки вообще как явление.

SIR>Прописано ли это как-либо в стандарте?


В стандарте C, C++ или любого другого языка программирования — однозначно нет. Поскольку вопрос относится к ABI платформы.
Ссылки VS портабельность
От: Shadows In Rain  
Дата: 04.03.12 19:42
Оценка:
Предыстория.
Я пишу хост для плагинов. Когда плагин загружен, он получает указатель на таблицу функций. Иногда мне нужно построить "текучий интерфейс", типа такого:
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. Я не прочь сэкономить немного времени при наборе длинных текстов.

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


Но:
1. Под одной и той же платформой плагины могут быть скомпилированы разными компиляторами.
2. Я не видел аналогичных интерфейсов, где бы использовались ссылки.
Поэтому меня терзают сомнения.

Собственно вопрос.
Передача-по-ссылке и возврат-по-ссылке — это портабельные приёмы?
Прописано ли это как-либо в стандарте?
portability passing by reference returning by reference
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.