有一个包含三个模板的类。具有不同参数个数的模板函数
#if defined(USE_CACHE_FALRU)
template class Cache<FALRU>;
#endif
#if defined(USE_CACHE_IIC)
template class Cache<IIC>;
#endif
#if defined(USE_CACHE_LRU)
template class Cache<LRU>;
#endif
这些模板具有共同的功能:
FALRUBlk* accessBlock(Addr addr, int &lat, int context_src, int *inCache = 0);
IICTag* accessBlock(Addr addr, int &lat, int context_src);
BlkType* accessBlock(Addr addr, int &lat, int context_src);
正如你所看到的,对于一个模板参数数目不同于别人。
现在缓存(),有它调用accessBlock()函数
template<class TagStore>
bool Cache<TagStore>::access(PacketPtr pkt, BlkType *&blk, int &lat, PacketList &writebacks)
{
...
blk = tags->accessBlock(pkt->getAddr(), lat, id);
...
}
在confing文件,所有的模板被定义
#define USE_CACHE_LRU 1
#define USE_CACHE_FALRU 1
#define USE_CACHE_IIC 1
我不知道这个文件是如何编译。如您所见,FALRUBlk::accessBlock()
需要4个参数。但是在Cache::access()
中,只传递了三个参数。 那么有人可以解释如何编译这个函数没有问题?
那么不是“参数必须匹配”重要吗? – mahmood 2012-01-18 17:40:54
@mahmood当然参数必须匹配(否则你会得到一个编译错误)。在第一种情况下,由于您通过传递3个值来调用它,所以'0'被自动分配给inCache变量)。 – 2012-01-18 17:42:43
问题是,当我为'BlkType * accessBlock'(现在需要四个参数)添加另一个参数时,编译器说错误,无法将我的第四个参数转换为'int *'(这是'FALRUBlk *'的第四个参数) – mahmood 2012-01-18 17:43:01