flushthink

just for essential skill
随笔 - 14, 文章 - 0, 评论 - 30, 引用 - 0
数据加载中……

template tips

1.当template parameters和call parameters之间没有明显联系,而且编译器无法推导出template parameters时,必须明确地再调用时指定template arguments
2.如果template parameters作为返回类型,那么也必须显式地指定template parameters,不过你可以把这个返回类型放在template parameters的第一个位置,只指定第一template parameters,其他的让编译器去推导。
3.就像functions一样,function templates也可以被重载。
4.在编译的过程中,编译器会根据每次具体使用的函数(带有template的function),来生成具体的函数代码实例。
5.在自变量推导过程中,惟有当参数不是一个reference类型时,array才会退化为pointer(通过称为退化)。
6.function template或class template的implement必须放在.hw文件里。常规的编程方法是把function或class的declare放在.h的文件中,把implement放在.cpp中,对应declare的implement已经在编译时生成了编译符号,所以可以在运行时调用。而function template或class template不同,它要针对具体的template parameters去生成不同的实例,而这个过程不会去多次解析放在cpp中的实现。

posted on 2010-12-02 03:56 tiny 阅读(1406) 评论(2)  编辑 收藏 引用

评论

# re: template tips  回复  更多评论   

第6条:好像可以在implement前加上export,就可以把implement放到.cpp里了。(primer上提到的,没试过)
2010-12-02 21:43 | xiao_liang

# re: template tips[未登录]  回复  更多评论   

@xiao_liang
好像不行吧,一般放在cpp的东西都是运行时实现,而模板类或模板函数的实现内容是对某一类型的抽象实现。实现还不存在,在编译的过程中才会发现需要哪些具体类型的运行时实现。
2010-12-03 08:29 | tiny

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理