Получение указателя на функцию от итератора над функцией deque - PullRequest
0 голосов
/ 16 ноября 2010

Я пытаюсь построить простой циклический планировщик с дефицитом, и сейчас я пытаюсь получить функцию, которая работает меньше всего времени. Мне возвращается «Ошибка шины», когда я пытаюсь преобразовать итератор в указатель. Ниже приведен мой код, ptof - это просто указатель на определение типа для функций, которые я использую в своей 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 ]

3 голосов
/ 16 ноября 2010
f = (ptof)(&(*it)); 

Это будет принимать адрес указателя функции. Попробуйте

f = *it;

В любом случае, избегайте бросков в стиле C. Если вы попробуете static_cast, компилятор скажет вам, что приведение неверно.

0 голосов
/ 16 ноября 2010

Взять адрес того, на что указывает итератор, тоже довольно странно, похоже, что вы приводите указатель на указатель на указатель на функцию, а это не то, что вы хотели, я не думаю.

Приведение в стиле c не помогает, потому что оно может выполнять любые виды бросков, даже те, которые вам не нужны.

Для чего-то подобного в C ++ было бы удобнее определить интерфейс с виртуальной функцией, чтобы избежать беспорядка, который может быть указателем на функцию.

...