C++模板类的声明与实现分离

1、我们在写类的时候一般通常将声明放到.h文件,函数实现放入.cpp,如下:
//.h
class Mystring{
public:
    Mystring(const char* str = "empty");
    Mystring(const char* data, int len);
    ...
    ...
    ~Mystring();
    
    int myReplace(const char* from, const char* to);
    int myappend(const char* data);
    ...
    ...

private:
    char* m_data;
    unsigned int m_len;
};

//.cpp
Mystring::Mystring(const char* str){
    ...
}

Mystring::Mystring(const char* data, int len){
    ...
}
...
...
2、但是在写类模板是将声明放到.h文件,函数实现放入.cpp,链接器会报错(提示找不到实现)如下:
//.h
template <class T> class Stack
{
public:
    Stack(int s = 10);
    ~Stack();

    void push(const T n);
    T pop()private:
    int m_size;
    int m_top;
    T* m_stackPtr;
};

//.cpp
template <class T> Stack<T>::Stack(int s){
...
}

template <class T> Stack<T>::~Stack(){
    ...
}
这样编译的话会有提示找不到或者未定义实现

解决办法:

1、将实现代码放入.tpp,在.h中包含此.tpp文件

2、使用显示声明来实现分离:在.cpp实现代码末尾加入显示声明要使用模板类的实例。eg:

template class TestTemplate<int>;
template class TestTemplate<float>;

注:以上例子只为了说明与论证此问题

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值