使用参数声明类对象而不使用if ... else

时间:2013-02-12 20:35:37

标签: c++

我是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,因为它们的范围在内部,如果......其他。

此外,我尝试过使用过吗? :运算符实现这个,仍然得到错误:

与三元运营商不匹配。

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

2 个答案:

答案 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::vectorif等容器,并根据需要使用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语句之前创建堆栈变量(pointerif或其他),以使其保持在范围内。 / p>