模板的声明和实现

通过显式的模板实例化得到类型。将所有的显式实例化过程安放在另外的文件中。在本例中,可以创建一个新文件templateinstantiations.cpp:

// array.h
#ifndef MYARRAY_H
#define MYARRAY_H
template <typename T, int SIZE>
class Myarray
{
    T data_[SIZE];
    Myarray (const Myarray& other);
    const Myarray& operator = (const Myarray& other);
public:
    Myarray(){};
    T& operator[](int i); //{return data_[i];}
    const T& get_elem (int i) const; //{return data_[i];}
    void set_elem(int i, const T& value); //{data_[i] = value;}
    operator T*(); //{return data_;}
};
#endif


// array.cpp
#include "array.h"

template<typename T, int SIZE> T& Myarray<T, SIZE>::operator [](int i)
{
    return data_[i];
}

template<typename T, int SIZE> const T& Myarray<T, SIZE>::get_elem(int i) const
{
    return data_[i];
}

template<typename T, int SIZE> void Myarray<T, SIZE>::set_elem(int i, const T& value)
{
    data_[i] = value;
}
template<typename T, int SIZE> Myarray<T, SIZE>::operator T*()
{
    return data_;
}


// templateinstantiations.cpp
#include "array.cpp"

template class Myarray <int, 50>; // 显式实例化


// main.cpp
#include <iostream>
#include "array.h";
using namespace std;
int main(void)
{
    Myarray<int, 50> intArray;
    intArray.set_elem(0, 2);
    int firstElem = intArray.get_elem(0);
    cout << firstElem << endl;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值