0

我是 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,因为它们的范围在 if...else 内。

此外,我尝试过使用 ? :运营商来实现这一点,仍然得到错误:

三元运算符不匹配。

有没有办法做到这一点?谢谢!

4

2 回答 2

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

我确信还有其他可能性。

于 2013-02-12T20:40:01.627 回答
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());
       }
    }

无论您使用哪种方法,其想法都是在您的语句之前创建堆栈变量(listpointer或其他)if,以便它保持在范围内。

于 2013-02-12T20:40:10.457 回答