2010-08-07 74 views
1

如何使用C++模板作为参数到一个objective-c方法? 基本上我想要做这样的事情:使用C++模板参数到一个客观c方法

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

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

+1

只是检查,你使用.mm而不是.m,对吧? – 2010-08-07 06:24:50

回答

4

不,你不能那样做。

Objective-C类,协议,和类别不能在C++模板中被声明,也不可以在C++模板被一个Objective-C接口,协议,或类别的范围内声明。

即使是可以声明该模板,它是无用的作为目标C的方法不能按类型被重载。

+0

啊。这是坏的...... :( – 2010-08-07 06:37:22

1

当文档说“C++模板参数也可以用作接收器或参数(虽然不是选择器)在Objective-C消息表达式”,这意味着,可以呼叫一个Objective-C方法从在模板化的C++类或函数中,而不是实际上可以制作模板化的Objective-C方法。

例如:

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

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