Проблема с бустом в C ++ - PullRequest
0 голосов
/ 14 марта 2011

Я сделал что-то, чтобы нарушить функциональность моей программы, но я не могу понять, что именно.Я определяю typedef в файле заголовка класса:

typedef boost::function<void(instr_ptr, std::vector<ResultBase*>) > GenFunction;

И внутри этого класса у меня есть два экземпляра:

GenFunction Gen;
GenFunction Kill

Я устанавливаю их следующим образом:

void DataFlowSolver::SetGenFunction(GenFunction &func)
{
    Gen = func;
}

void DataFlowSolver::SetKillFunction(GenFunction &func)
{
    Kill = func;
}

У меня есть другая функция в отдельном заголовочном файле:

void GenLiveVar(const instr_ptr instr, std::vector<ResultBase*> &list);

Я создаю экземпляр класса DataFlowSolver и пытаюсь назначить его следующим образом:

blockSolver.SetGenFunction(GenLiveVar);

ОднакоКомпилятор жалуется:

CFG.cc: 617: ошибка: нет соответствующей функции для вызова DataFlowSolver :: SetGenFunction (void (&) (instr_ptr, std :: vector> &)) 'DataFlowSolver.ч: 21: примечание: кандидаты: void DataFlowSolver :: SetGenFunction (GenFunction &)

Но это позволяет мне сделать это:

GenFunction fun = GenLiveVar;
blockSolver.SetGenFunction(fun);

У кого-либо есть идеи, что может быть не так?Я знаю, что это работало раньше, но я не уверен, как мне удалось это сломать ...

1 Ответ

1 голос
/ 14 марта 2011

Вы передаете boost::function в Set*Function по неконстантной ссылке. Это предотвращает использование временных значений в качестве аргументов, а преобразование из обычной функции в boost::function создает временное значение. Вам нужно будет использовать константную ссылку для вашего типа параметра, чтобы код работал правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...