![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ShadowsInRain |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.3.2012 Репутация: нет Всего: нет |
Предыстория.
Я пишу хост для плагинов. Когда плагин загружен, он получает указатель на таблицу функций. Иногда мне нужно построить "текучий интерфейс", типа такого:
По привычке я использую указатели, но в этом случае мне хотелось бы использовать ссылки, ибо 1. Функции этого интерфейса никогда не вернут невалидный указатель на iEditor. 2. По очевидным причинам сохранять указатель на iEditor недопустимо. 3. Нет необходимости поддерживать совместимость с Си. 4. Я не прочь сэкономить немного времени при наборе длинных текстов.
Но: 1. Под одной и той же платформой плагины могут быть скомпилированы разными компиляторами. 2. Я не видел аналогичных интерфейсов, где бы использовались ссылки. Поэтому меня терзают сомнения. Собственно вопрос. Передача-по-ссылке и возврат-по-ссылке — это портабельные приёмы? Прописано ли это как-либо в стандарте? До этого я задавал вопрос на стакЪоверфлов, но ответов вообще не получил, только смутные комментарии. |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ссылка - это псевдоним.
таким образом, ты привяжешь себя к ABI. http://liveworkspace.org/code/c70daef6968c...b0a93eeca719768 в плагинах не зря используются указатели и простые типы. |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
В интерфейсе плагина лучше использовать чистый C89.
-------------------- You're face to face With man who sold the world |
|||
|
||||
| ShadowsInRain |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.3.2012 Репутация: нет Всего: нет |
boostcoder, но на стек то кладётся адрес объекта, а не псевдоним.
http://liveworkspace.org/code/4bf894c0036f...c1b6070a8ba1b57 Поэтому мне интересно — определено ли это стандартом, или отдано на волю компилятора. newbee, возможно это было хорошо в 89м году. В 2012м я хочу пронстранства имён и короткие имена типов. |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
-------------------- You're face to face With man who sold the world |
|||
|
||||
| ShadowsInRain |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.3.2012 Репутация: нет Всего: нет |
newbee, наружу там торчит только одна функция, которая принимает указатель на основной интерфейс.
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не понял аналогии с примером.. в примере, ты передаешь адрес. |
|||
|
||||
| ShadowsInRain |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 4.3.2012 Репутация: нет Всего: нет |
boostcoder, func_b принимает ссылку.
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ах да) ну не знаю.. выглядит правдоподобно, хоть и необычно. мои познания в плагинах исчерпаны... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если я правильно понял вопрос, то
ссылка в аргументах функции лишь гарантированный не нуль указатель.. т.е. при взаимодействие с си используется передача указателя ) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |