读书人

关于C++模板类解决方案

发布时间: 2012-04-28 11:49:53 作者: rapoo

关于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);
没有定义啊,

读书人网 >C++

热点推荐