我正在编写面向对象版本的 FCFS 调度算法,但遇到了一个问题。我需要知道是否有任何方法可以访问成员函数定义内的对象数组,而无需将其作为参数显式传递。
我试过使用“this-pointer”,但由于计算当前进程的完成时间需要前一个进程的完成时间,“this”不起作用。或者至少我认为不会。我不知道如何使用“this”访问“previous”对象
void Process :: scheduleProcess(int pid) {
if(pid == 0) finishTime = burstTime;
else finishTime = burstTime +
this->[pid-1].finishTime;
turnAroundTime = finishTime - arrivalTime;
waitingTime = turnAroundTime - burstTime;
}
我显然可以将对象数组作为参数发送并直接使用它。我只想知道是否有更好的方法来做到这一点:
这是调用上述函数的部分:
for(int clockTime = 0; clockTime <= maxArrivalTime(process);
clockTime++) {
// If clockTime occurs in arrivalTime, return pid of that
process
int pid = arrivalTimeOf(clockTime, process);
if(pid >= 0) {
process[pid].scheduleProcess(pid);
} else continue;
}
由于我正在使用对象 vector process[pid] 调用 scheduleProcess(),因此我应该能够操作与 process[pid] 对象相关的变量。如何在函数本身中访问 process[pid-1]? (不将过程 vector 作为参数传递)
最佳答案
由于 scheduleProcess
是 Process
的成员,它只知道 Process
对象知道的内容。在此级别上,以前的过程是未知的。有一些方法可以使用未定义行为并对您的代码做出更多假设来解决此问题,但应避免这些方法。
避免所有这些情况的一种可移植解决方案是简单地将前一个进程的完成时间作为参数传递,因为您在调用 scheduleProcess
时知道该值。如果没有前一个过程(数组中的第一个条目),则此完成时间将为 0。
关于c++ - 如何在 C++ 中访问成员函数内的对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57494942/