我是C ++的新手,并尝试编写缓存模拟器。 CACHE类的构造函数是
CACHE (int, int, int, int, CACHE *); //declare
并且在main()
中,我试图根据某个变量创建对象:
int main()
{
if ( L2_size == 0 ) //only one level of cache
{
CACHE L1(L1_size, blocksize, L1_assoc, inclusion, 0);
}
else //2 level of caches
{
CACHE L2(L2_size, blocksize, L2_assoc, inclusion, 0);
CACHE L1(L1_size, blocksize, L1_assoc, inclusion, &L2);
}
}
这个问题是我无法访问L1和L2,因为它们的范围在内部,如果......其他。
此外,我尝试过使用过吗? :运算符实现这个,仍然得到错误:
与三元运营商不匹配。
有没有办法做到这一点?谢谢!
答案 0 :(得分:1)
这样的事情,也许是:
CACHE *L2 = 0;
CACHE *L1 = 0;
if (L2_size)
{
L2 = new CACHE(L2_size, blocksize, L2_assoc, inclusion, 0);
}
L1 = new CACHE(L1_size, blocksize, L1_assoc, inclusion, L2);
我确信还有其他可能性。
答案 1 :(得分:0)
您可以在std::list
语句之前使用std::vector
或if
等容器,并根据需要使用push_back多个CACHE对象。
示例:
int main()
{
std::list<CACHE> caches;
if (L2_size == 0)
{
caches.push_front(CACHE(L1_size, blocksize, L1_assoc, inclusion, 0));
}
else
{
caches.push_front(CACHE(L2_size, blocksize, L2_assoc, inclusion, 0);
caches.push_front(CACHE(L1_size, blocksize, L1_assoc, inclusion, &(*caches.begin());
}
}
无论使用哪种方法,我们的想法是在list
语句之前创建堆栈变量(pointer
,if
或其他),以使其保持在范围内。 / p>