Все в заголовке:)
Есть ли в ObjC шаблоны?
Мне нужен эквивалент С#:
public class MyClass<T> : Message
в ObjC.
Любые подсказки будут сильно благодарны:(
Все в заголовке:)
Есть ли в ObjC шаблоны?
Мне нужен эквивалент С#:
public class MyClass<T> : Message
в ObjC.
Любые подсказки будут сильно благодарны:(
Нет такой функции ObjC. Хотя ObjС++ существует, я решительно отвергаю его широкое использование. У этого есть много проблем от плохой поддержки инструмента и отладчика, к плохой оптимизации компилятора, к ухудшенной производительности ARC.
Обычно в ObjC шаблоны не требуются, потому что это не строго типизированный язык. NSArray
может содержать любой объект, поэтому вам не нужно использовать шаблон для получения нужного типа. У вас есть конкретная проблема, которую вы пытаетесь решить? Вероятно, существует лучшее решение ObjC.
Obj-C поддерживает шаблоны с Xcode v7. Он называется generics:
Легкие дженерики теперь позволяют вам указывать информацию о типе для классы сбора, такие как NSArray, NSSet и NSDictionary. Тип информация улучшает доступ Swift при переходе от Objective-C, и упрощает код, который вы должны написать. Например:
NSArray<UIImage *> *images; NSDictionary<NSString *, NSURL *> *resourcesByName;
Ищите "Objective-C Изменения языка" в разделе https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html
Кстати, Xcode поддерживает добавление классов С++ через New- > File. Использование extern "C" {} конструкции в С++ означает, что вы можете предоставить как можно больший или маленький C-вызываемый интерфейс по мере необходимости, который вы можете вызвать непосредственно из вашего кода Objective-C, так как Objective-C является надмножеством C.
Сказав это, вероятно, хорошая идея придерживаться парадигмы Objective-C, если у вас нет насущной причины выйти за ее пределы, например, необходимо включить в существующий код существующего кода на С++. (Чтобы не сказать, что Objective-C является "лучшим" языком, это совсем другое дело.)