我做了一些事情来破坏程序中的功能,但是我不知道是什么。我在类头文件中定义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/