数组类指针

模板参数可以是字面量型参数(非类型参数),

template <typename T,int N>  // N是字面量型参数
void function()
{
    
}

function<double,10>();  // 调用时

 

字面量型参数限制:变量,浮点数(无法精确表示),类对象不能作为模板参数。(模板参数是在编译阶段是要被确定的)

// 类模板实现递归

template
< int N >  // 字面量参数模板
class Sum
{
public:
    static const int VALUE = Sum<N-1>::VALUE + N;  // 递归过程是由编译器完成的
};

template
< >      // 参数为字面量的完全特化模板
class Sum < 1 >   // 当N为1时调用这里的模板,递归的截至条件
{
public:
    static const int VALUE = 1;  // VALUE 可能存入静态存储区,可能存入常量表。由于定义了值,所以进入常量表。由于被static声明,所以进入静态存储区。
};

int main()
{
    cout << Sum<10>::VALUE << endl;  // 编译时就做了递归操作,所以VALUE值是一个常量值,这里只是访问
    return 0;
}

 

 

数组模板类:

 1 #ifndef _ARRAY_H_
 2 #define _ARRAY_H_
 3 
 4 template
 5 < typename T, int N >
 6 class Array
 7 {
 8     T m_array[N];
 9 public:
10     int length();
11     bool set(int index, T value);
12     bool get(int index, T& value);
13     T& operator[] (int index);
14     T operator[] (int index) const;
15     virtual ~Array();
16 };
17 
18 template
19 < typename T, int N >
20 int Array<T, N>::length()
21 {
22     return N;
23 }
24 
25 template
26 < typename T, int N >
27 bool Array<T, N>::set(int index, T value)
28 {
29     bool ret = (0 <= index) && (index < N);
30     
31     if( ret )
32     {
33         m_array[index] = value;
34     }
35     
36     return ret;
37 }
38 
39 template
40 < typename T, int N >
41 bool Array<T, N>::get(int index, T& value)
42 {
43     bool ret = (0 <= index) && (index < N);
44     
45     if( ret )
46     {
47         value = m_array[index];
48     }
49     
50     return ret;
51 }
52 
53 template
54 < typename T, int N >
55 T& Array<T, N>::operator[] (int index)
56 {
57     return m_array[index];
58 }
59 
60 template
61 < typename T, int N >
62 T Array<T, N>::operator[] (int index) const
63 {
64     return m_array[index];
65 }
66 
67 template
68 < typename T, int N >
69 Array<T, N>::~Array()
70 {
71 
72 }
73 
74 #endif
View Code

 

#include <iostream>
#include <string>
#include "Array.h"
#include "HeapArray.h"

using namespace std;

int main()
{
    Array<double, 5> ad;
    
    for(int i=0; i<ad.length(); i++)
    {
        ad[i] = i * i;
    }
    
    for(int i=0; i<ad.length(); i++)
    {
        cout << ad[i] << endl;
    }
    

    return 0;
}
View Code

 

posted @ 2019-05-14 12:56  张不源  Views(262)  Comments(0Edit  收藏  举报