使用参数声明类对象,而不使用if.else
Declare class object with parameters without using if...else
我是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::list
或std::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
语句之前创建堆栈变量(list
、pointer
或其他任何变量),以便它保持在作用域中。
相关文章:
- 在 C++ 中的 if-else if- else 语句期间更改变量
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 我需要把 constexpr 放在 else-if 之后吗?
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- 如何在 C++17 中将 "else-if" 与初始值设定项一起使用?
- if, else if, else 函数未准确显示结果
- 使用 if/else if 的函数输出问题
- 需要消除这些"else if"并优化代码
- 不必要的 else 语句:当可以使用 IF 时,使用 ELSE IF 有什么缺点吗?
- MQL4:我的if/else if liop只有一半导致当前执行
- 如何在 else-if 语句中正确使用 or 语句 (||)
- if else-if else 语句 c++ 的替代项
- 具有"else if"方法问题 C++ 的基本计算器
- 如果/else-if语句将如何处理此操作
- If和else-If语句.它是如何在下面的代码中工作的
- 优化代码/实现"for"循环而不是长"if - else if - else"
- "if"块没有大括号,使后续"else if"嵌套
- 试图编写一个只使用if和else-if语句对两个数字进行排序的程序
- if else-if梯形图和编译器优化
- C++在else/if中声明一个优先级队列