- 博客(0)
- 资源 (2)
空空如也
您的C++代码里有多少template
to FreeFice
>>模板就如同宏一样,看起来很风光,但陷阱不少
模板陷阱多是因为它缺少内在的concepts的支持,所以产生了一堆难以理解的编译错误.对于这个问题,目前有一些辅助的东西来解决这个问题例如boost.concept, 被bjarne提倡的constraints classes 以及loki的compiling-time error checking. 这都是在目前来说比较好的解决方案.
而宏是避开了类型系统,导致毫不相干的编译错误.
很多用模板的地方都可以用OO来代替,这并不是说模板就没用. 我觉得模板的使用的起点比较高.简单的使用很容易接受.而大量使用就需要经验. 一句话就是敢不敢用和用的好不好.
一个简单的例子
比如一个窗口类 有个成员函数用于设定菜单栏.典型的做法是
#include"menubar.h"
class Window
{
public:
void set_menu(const menubar& m)
{
append(wnd_, m.handle());
//wnd_是该Window的句柄, m.handle()返回菜单栏的句柄
}
};
在窗口的set_menu中使用了menubar, 使得menubar.h 和这个文件形成物理上等倚赖
而且用模板就可以解决这个倚赖
class Window
{
public:
template<typename _Menu>
void set_menu(const _Menu& m)
{
Category_Check<typename _Menu::category, Menu_Category>();
//首先检测传入的m的类型是不是我们需要的Menu类型.如果是就肯定可以保证下面的接口要求.如果不是就可以在其中抛出异常 或 输出一个让人看得懂的compiling error终止编译
append(wnd_, m.handle());
}
};
当然,这个例子并不是为了说服别人因为这个极端的理由就去使用模板.一切慢慢来
to bruceteen(周星星):
嘿嘿,大侠您好~~
>>如果用不到template,那么我就用purc c写代码;
不考虑用继承吗? :)
2009-05-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人