关于C++模板类
ClockProPolicy.h文件
#pragma once
#include <list>
#include <iostream>
#include "CacheItem.h"
#include <assert.h>
#include <boost/ptr_container/ptr_list.hpp>
#include <boost/ptr_container/ptr_container.hpp>
using namespace std;
using namespace boost;
enum Estate{ HOT=0,COLD,TEST };
template<class K>
class ClockProItem {
public:
ClockProItem()
{
isUsed = false;
}
ClockProItem(K pItem_)
{
pItem = pItem_;
}
~ClockProItem(void);
//public boolean isResident;
Estate m_stateFlag; // hot cold test
bool isUsed;
private:
K pItem; // this address is used as UniqueKey
public:
void setState( Estate state)
{
m_stateFlag = state;
}
Estate getState()
{
return m_stateFlag;
}
};
template<class K>
class ClockProPolicy //: public ReplacementPolicy<K>
{
public:
ClockProPolicy(int capacity_, float hotRate_,int test_);
~ClockProPolicy(void);
virtual void access(K pVisitItem, K pSwapOutItem);
virtual void remove(K pItem);
typedef ClockProItem<K> ItemType;
//typedef list<ItemType> ItemListType;
typedef typename ptr_list<ItemType> ItemListType;
typedef typename ItemListType::iterator ItemListTypeIter;
private:
ItemListType m_ClockList;
ItemListTypeIter m_HotEntry;
ItemListTypeIter m_ColdEntry;
ItemListTypeIter m_TestEntry;
};
template<class K>
ClockProPolicy<K>::ClockProPolicy(int capacity_, float hotRate_,int test_)
{
assert( hotRate_ > 0 && hotRate_ < 1 );
//pre intialize the bucket
//set the three clock hand
int hot = capacity_ * hotRate_;
int cold = capacity_ * (1-hotRate_);
m_HotEntry = m_ClockList.begin();
m_ColdEntry = m_ClockList.begin();
m_TestEntry = m_ClockList.begin();
//
//temp = m_ClockList->front()+ hot;
int n = 0;
while( n!= hot)
{
m_ColdEntry++ ;
m_TestEntry++;
n++;
}
while( n!= capacity_)
{
m_TestEntry++ ;
n++;
}
}
template<class K>
ClockProPolicy<K>::~ClockProPolicy(void)
{
//ItemType tempItem = *temp;
//delete tempItem;
/*while( temp != m_ClockList->end())
{
delete (*temp);
temp++;
}*/
//delete m_ClockList;
}
template<class K>
void ClockProPolicy<K>::access(K pVisitItem, K pSwapOutItem)
{
}
template<class K>
void ClockProPolicy<K>::remove(K pItem) //push back to pool
{
}
main.cpp
int main()
{
ClockProPolicy<int> test(10,0.8,5);
}
发生错误:
1>正在链接...
1>LINK : warning LNK4076: 无效的增量状态文件“C:\Documents and Settings\liahu.CISCO\My Documents\Visual Studio 2008\Projects\cache_LRU\Debug\cache_LRU.ilk”;正在非增量链接
1>PluggableCache.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall ClockProItem<int>::~ClockProItem<int>(void)" (??1?$ClockProItem@H@@QAE@XZ),该符号在函数 "public: void * __thiscall ClockProItem<int>::`scalar deleting destructor'(unsigned int)" (??_G?$ClockProItem@H@@QAEPAXI@Z) 中被引用
1>C:\Documents and Settings\liahu.CISCO\My Documents\Visual Studio 2008\Projects\cache_LRU\Debug\cache_LRU.exe : fatal error LNK1120: 1 个无法解析的外部命令
[解决办法]
~ClockProItem(void);
没有定义啊,