2

如何使用 c++ 模板作为目标 c 方法的参数?基本上我想做这样的事情:

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

但这不起作用。根据文档,这是可能的,但它没有提供任何示例。有谁知道如何做到这一点?

4

2 回答 2

5

不,你不能那样做。

Objective-C 类、协议和类别不能在 C++ 模板内声明,C++ 模板也不能在 Objective-C 接口、协议或类别的范围内声明。

即使可以声明该模板,它也是无用的,因为 Objective-C 方法不能按类型重载。

于 2010-08-07T06:32:24.840 回答
2

当文档说“ C++ 模板参数也可以用作 Objective-C 消息表达式中的接收器或参数(尽管不是作为选择器) ”时,这意味着您可以从模板化的 C++ 类或函数中调用 Objective-C 方法,并不是说您实际上可以制作模板化的 Objective-C 方法。

例如:

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

...应该可以工作(尽管我还没有测试过)。当然,调用时使用的类型f必须是可以作为参数有效传递给 的东西doSomethingWithObject:,否则调用代码将无法编译。

于 2010-08-07T06:37:07.187 回答