是否可以在函数外使用if语句(如main)
Is it possible to use if statement outside a function (like main)?
我正在实现一个BOOOS-面向基本对象的操作系统,现在我需要让程序的调度器在FCFS和Priority之间进行选择。我有一个名为Task的类,在其中我创建了两个队列:std::queue
和std::priority_queue
。这些队列是在Task.h中声明的静态成员,我需要在Task.cc中与类的其他静态成员进行任何其他事情之前进行初始化,比如:
namespace BOOOS {
volatile Task * Task::__running;
Task * Task::__main;
int Task::__tid_count;
int Task::__task_count;
std::queue<Task*> Task::__ready;
std::priority_queue<Task*> Task::__ready;
(rest of the Task.cc)
}
你可以看到我有两个__准备好的队列。这就是为什么我只需要使用其中一个。如果用户想要初始化FCFS调度器,我会使用没有优先级的调度器;如果用户想要优先级调度器,我则使用priority_queue。这是由BOOS的静态枚举成员控制的。所以,我的问题是:我可以在这部分代码中使用类似于if
的东西来只选择一个队列,而不是创建两个队列,并在每次需要在程序中操作它时生成一个if
吗?
不,使用if()
语句是不可能的。这些实际上需要放在一个功能体中。
您的选择是
-
使用C预处理器并具有
#if !defined(USE_PRIORITY_QUEUE) std::queue<Task*> Task::__ready; #else std::priority_queue<Task*> Task::__ready; #endif
预处理器指令。
-
使用模板类和专用
template<bool use_priority_queue> struct TaskQueueWrapper { typedef std::queue<Task*> QueueType; }; template<> struct TaskQueueWrapper<true> { typedef std::priority_queue<Task*> QueueType; }; TaskQueueWrapper<true>::QueueType Task::__ready;
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 我似乎对if/else的基本语句有问题:/
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果中的多个语句是否与多个 if 相同?
- C++ If/Else 语句被跳过
- 使用语句if时逻辑的问题
- 如何添加语句if-else
- 如何将语句if(isalpha(c))从c++转换为MIPS ?
- 在if语句if C++中创建对象时出现作用域问题
- if语句-if/else和参数放置C++