如何使C模板适用于使用ARC的Objective C类型?
发布时间:2020-12-16 07:31:25 所属栏目:百科 来源:网络整理
导读:举一个小例子.如果我编译以下main.mm文件没有ARC,它工作正常. #import Foundation/Foundation.htemplate typename Tint testing(const T whoCares) { return 0;}int main(int argc,const char * argv[]){ return testing(@"hello");} 如果我使用ARC编译它,会
举一个小例子.如果我编译以下main.mm文件没有ARC,它工作正常.
#import <Foundation/Foundation.h> template <typename T> int testing(const T & whoCares) { return 0; } int main(int argc,const char * argv[]) { return testing(@"hello"); } 如果我使用ARC编译它,会发生以下错误: /Users/sam/Projects/TemplateTest/TemplateTest/main.mm:10:12: error: no matching function for call to 'testing' return testing(@"hello"); ^~~~~~~ /Users/sam/Projects/TemplateTest/TemplateTest/main.mm:4:5: note: candidate template ignored: substitution failure [with T = NSString *] int testing(const T & whoCares) { ^ 1 error generated. 为什么?更重要的是,它可以解决吗?替换失败的原因没有任何进一步的解释.如果我显式传递类型,如下: return testing<NSString *>(@"hello"); 有用.话虽如此,我不想,也不应该在我的代码中做到这一点. 有趣的是,这只适用于Objective C类型.无论启用ARC,以下替换都可以正常工作: return testing("hello"); return testing(123); 解决方法
不幸的是,看起来这可能是clang的编译器错误.
见:http://lists.apple.com/archives/objc-language/2012/Feb/msg00078.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |