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

Declare class object with parameters without using if...else

本文关键字:else if 对象 参数 声明      更新时间:2023-10-16

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

此外,我试过使用?:操作员执行此操作,仍然会得到错误:

三元运算符不匹配。

有办法做到这一点吗?谢谢

可能是这样的:

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

我相信还有其他的可能性。

您可以在if语句之前使用std::liststd::vector之类的容器,并根据需要推送回任意数量的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());
       }
    }

无论使用哪种方法,其思想都是在if语句之前创建堆栈变量(listpointer或其他任何变量),以便它保持在作用域中。