如何使用 c++ 模板作为目标 c 方法的参数?基本上我想做这样的事情:
template<typename T>
- (void)method:(T)arg
但这不起作用。根据本文档,这是可能的,但它没有提供任何示例。有谁知道如何做到这一点?
如何使用 c++ 模板作为目标 c 方法的参数?基本上我想做这样的事情:
template<typename T>
- (void)method:(T)arg
但这不起作用。根据本文档,这是可能的,但它没有提供任何示例。有谁知道如何做到这一点?
不,你不能那样做。
Objective-C 类、协议和类别不能在 C++ 模板内声明,C++ 模板也不能在 Objective-C 接口、协议或类别的范围内声明。
即使可以声明该模板,它也是无用的,因为 Objective-C 方法不能按类型重载。
当文档说“ C++ 模板参数也可以用作 Objective-C 消息表达式中的接收器或参数(尽管不是作为选择器) ”时,这意味着您可以从模板化的 C++ 类或函数中调用 Objective-C 方法,并不是说您实际上可以制作模板化的 Objective-C 方法。
例如:
template<typename T>
void f(id obj, T t) {
[obj doSomethingWithObject:t];
}
...应该可以工作(尽管我还没有测试过)。当然,调用时使用的类型f
必须是可以作为参数有效传递给 的东西doSomethingWithObject:
,否则调用代码将无法编译。