我做了一些事情来破坏程序中的功能,但是我不知道是什么。我在类头文件中定义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.h:21:注意:候选对象是:无效
  DataFlowSolver :: SetGenFunction(GenFunction&)


但这让我做到了:

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


有人知道什么地方可能出问题吗?我知道这曾经有效,但是我不确定如何设法打破它...

最佳答案

您正在通过非常量引用将boost::function传递到Set*Function中。这样可以防止将临时变量用作参数,并且从普通函数到boost::function的转换会创建一个临时值。您需要为参数类型使用const引用,以使代码正常工作。

关于c++ - C++ Boost函数问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5295030/

10-11 21:28