通过函数deque从迭代器获取函数指针

时间:2010-11-15 23:23:47

标签: c++ function pointers casting iterator

我正在尝试构建一个简单的赤字循环调度程序,而现在我正在尝试获得运行时间最短的函数。当我尝试将迭代器转换为指针时,我收到了“Bus Error”。下面是我的代码,ptof只是一个typedef指针,指向我在deque中的函数类型,State有每个进程的信息。我究竟做错了什么?非常感谢您的帮助。

ptof leastTime(deque<ptof> fnc, map<ptof, State *> s){
double leastElapsed= 100000000;
ptof  f;

deque<ptof>::iterator it;
for (it=fnc.begin() ; it < fnc.end(); it++ ){
if(s[*it]->elapsed<leastElapsed){
     f = (ptof)(&(*it)); 
cout<< s[f]->name<<endl;
     }
  }
return f;
}

2 个答案:

答案 0 :(得分:3)

f = (ptof)(&(*it)); 

这将取得函数指针的地址。尝试

f = *it;

无论如何,避免使用C风格的演员表。如果您尝试使用static_cast,编译器会告诉您演员表无效。

答案 1 :(得分:0)

获取迭代器指向的地址也很奇怪,看起来你正在向一个指向函数指针的函数指针生成一个指针,这不是你想要的我想不到的。

c风格的演员阵容没有帮助,因为它可以进行任何类型的演员表演,即使是你不想要的演员表。

对于C ++中的类似内容,定义具有虚函数的接口可能更清晰,以避免可能成为函数指针的混乱。