在分離編譯模板函數時,發現需要在包含類的調用文件中需要添加模板函數的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文件纔可以使用