gpt4 book ai didi

c++ - 具有不同数量参数的模板函数

转载 作者:行者123 更新时间:2023-11-30 03:04:08 25 4
gpt4 key购买 nike

有一个包含三个模板的类。

#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);

如您所见,其中一个模板的参数数量与其他模板不同。

现在在Cache()中,有一个调用accessBlock()的函数

template<class TagStore>
bool Cache<TagStore>::access(PacketPtr pkt, BlkType *&blk, int &lat, PacketList &writebacks)
{
...
blk = tags->accessBlock(pkt->getAddr(), lat, id);
...
}

在conf文件中,定义了所有模板

#define USE_CACHE_LRU 1
#define USE_CACHE_FALRU 1
#define USE_CACHE_IIC 1

我想知道这个文件是如何编译的。如您所见,FALRUBlk::accessBlock() 有 4 个参数。然而在 Cache::access() 中,只传递了三个参数。那么有人可以解释一下这个函数是如何编译的吗?

最佳答案

它编译得很好,因为使用了第 4 个默认值:

FALRUBlk* accessBlock(Addr addr, int &lat, int context_src, int *inCache = 0);

其他 2 个只有 3 个参数:

IICTag* accessBlock(Addr addr, int &lat, int context_src);
BlkType* accessBlock(Addr addr, int &lat, int context_src);

因此,您始终可以像示例中那样调用该方法:

blk = tags->accessBlock(pkt->getAddr(), lat, id);

关于c++ - 具有不同数量参数的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8914655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com