Использование шаблона c ++ в качестве аргумента для методаjective-c - PullRequest
1 голос
/ 07 августа 2010

Как я могу использовать шаблон c ++ в качестве параметра для методаjective-c? по сути, я хочу сделать что-то вроде этого:

template<typename T> 
- (void)method:(T)arg

но это не работает. в соответствии с этим документом это возможно, однако в нем не приводится никаких примеров. Кто-нибудь знает, как делать это?

Ответы [ 2 ]

4 голосов
/ 07 августа 2010

Нет, вы не можете этого сделать.

Классы, протоколы и категории Objective-C не могут быть объявлены в шаблоне C ++, и шаблон C ++ не может быть объявлен в рамках интерфейса, протокола или категории Objective-C. *

Даже если можно объявить этот шаблон, он бесполезен, поскольку методы Objective-C не могут быть перегружены типом.

1 голос
/ 07 августа 2010

Когда в документации сказано: " Параметры шаблона C ++ также можно использовать в качестве получателей или параметров (хотя и не в качестве селекторов) в выражениях сообщений Objective C ", это означает, что вы можете вызвать Objective -C метод из шаблонного класса или функции C ++, но вы не можете создать шаблонный метод Objective-C.

Например:

template<typename T>
void f(id obj, T t) {
    [obj doSomethingWithObject:t];
}

... должно работать (хотя я не проверял это). Конечно, тип, используемый при вызове f, должен был бы быть чем-то, что могло бы быть корректно передано в качестве параметра doSomethingWithObject:, иначе код вызова не скомпилируется.

...