STL分离编译遇到的问题

来源:互联网 发布:xmind mac怎么安装 编辑:程序博客网 时间:2024/05/16 15:09

在分离编译模板函数时,发现需要在包含类的调用文件中需要添加模板函数的cpp实现文件,目前编译原理还不是很懂。先记下来!

.H


#ifndef _LOCKFREERINGQUEUE_H_
#define _LOCKFREERINGQUEUE_H_


#include <vector>


template<class T>
class CLockFreeRingQueue 
{
public:
CLockFreeRingQueue(const size_t &size) : m_iBufferSize(size + 1), m_iReadIndex(0), m_iWriteIndex(0) 
{
m_DataVector.resize(m_iBufferSize);
}


bool putData(T* element); 
bool getData(T* element);  


void showparameters()
{
int m_szie = m_iBufferSize;
int m_read = m_iReadIndex;
int m_write = m_iWriteIndex;
}


private:


size_t m_iReadIndex;
size_t m_iWriteIndex;
size_t m_iBufferSize;
public:


std::vector<T> m_DataVector;
};


#endif


.cpp


#include "stdafx.h"
#include "LockFreeRingQueue.h"


template<class T>
bool CLockFreeRingQueue<T>::putData(T *element) 


{
size_t iNextIndex = (m_iWriteIndex + 1) % m_iBufferSize;
if (iNextIndex == m_iReadIndex) 
{
return false;

else 
{
m_DataVector[m_iWriteIndex] = *element;
m_iWriteIndex = iNextIndex;
return true;
}
}


template<class T>
bool CLockFreeRingQueue<T>::getData(T *element) 
{
if (m_iReadIndex == m_iWriteIndex) 
{
return false;
}
else 
{
*element = m_DataVector[m_iReadIndex];
m_iReadIndex = (m_iReadIndex + 1) % m_iBufferSize;
return true;
}
}


如果想使用这个类 ,需要包含.cpp文件才可以使用


0 0
原创粉丝点击