首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

什么是模板非类型参数,为何C++要支持模板非类型参数

2012-02-21 
求教:什么是模板非类型参数,为何C++要支持模板非类型参数?RT请问:1:什么是模板非类型参数?2:为何C++要支持

求教:什么是模板非类型参数,为何C++要支持模板非类型参数?
RT
请问:
1:什么是模板非类型参数?

2:为何C++要支持模板非类型参数?

欢迎转贴或者给个链接我自己去看,越详细越好。网上关于模板非类型参数介绍似乎特别少。

[解决办法]
类似于这种:
template <typename T,int i>
class Test
{
public:
Test(T t1){t=t1;}
int getSecondType(){return i;}
T getT(){return t;}
private:
T t;
};

int main()
{
Test <int,3> t(55);
cout < <t.getSecondType() < <endl;
return 0;
}

2.为什么要支持,肯定是有这种需求才会有这种语法吧。
我想的一个理由,可能是为了逻辑上的完备吧。例如typename T和int i,都是一个抽象的类型对应一个具体的实例。stl里和bitset相关的好像也用到了这种语法。
[解决办法]
这是因为需要才这样的,不如说:我们要实现一个堆栈,那么我们在堆栈中的数据可能是指针,字符串,整型等,那么如果没有摸板非类型参数,我们就要定义3个摸板,但是我们有了摸板非类型参数,我们就可以定义一个摸板,在定义的时候指定类型.


我理解的是这个样子,欢迎大家讨论!!
[解决办法]
类型参数用于指定一个类型,非类型参数用于指定一个量。
有的模板可以基于类型而实例化,比如一个链表,可以装字符串对象,也可以装整数;
而有的模板可以基于一个量而实例化,比如一个32位长的bitset。
这些都是我们所需要的。我们只需要写一次代码,而可以针对多种类型或多种不同的常量来产生不同的类。
[解决办法]
也可以反过来想:其实目前C++的模板所提供的特性和功能,应该不是多了,而是还不太够。

热点排行