2014-02-04 4 views
1

Мне нужно синтезировать во время выполнения классы как прокси-сервер для лежащих в основе классов C++. Я уже знаю, как собирать методы и синтезировать с помощью шаблона magic, свободных функций C++, чтобы развернуться и вызвать соответствующий объект. Однако мне нужно знать, что прототип реализации методов со ссылками должен быть.Objective-C++: Как реализованы ссылки?

Вот конкретный пример:

Если у меня есть C метод ++, как это:

void set (string const& string , shared_ptr<Object> const& pObject) ; 

Буквальный перевод в Objective-C++ (примечание: это не будет использовать дословный перевод, но есть другие, которые бы) было бы:

- (void) setObject:(shared_ptr<Object> const&)object forKey:(std::string const&)key ; 

буквальный C IMP будет:

void MyFakeProxyClass_setObjectForKey (MyFakeProxyClass* self , SEL cmd , shared_ptr<Object> const& object , string const& key) ; 

Но зная, как Objective-C использует вариации для передачи сообщений, эта функция не может принимать ссылку в качестве аргумента.

Значит, Objective-C++ конвертирует ссылки в указатели? Или что?

Любое понимание было бы принято с благодарностью!

+3

Референции - это не что иное, как скрывающие указатели компилятора за вашей спиной. – Kevin

ответ

2

Objective-C не использует varargs для сообщений. Реализация метода Objective-C, который принимает ссылочный параметр, такая же, как функция C++, которая принимает ссылочный параметр.

+1

Действительно? objc_msgSend делает. – iAdjunct

+1

Нет, это не так. Прототипом функции C для objc_msgSend() является ложь. –

Смежные вопросы