我有一个包含函数指针的向量。
我将为您进行翻译。以下是我推入向量中的函数定义:
以下语句用于将函数/指针添加到向量中。
typedef bool (*fPtr)();
vector<fPtr> AlgoDB;
我将为您进行翻译。以下是我推入向量中的函数定义:
我推入向量中的函数定义如下
bool SAlgos1::Algo1() {
cout << "Executing Algo1" << endl;
return true;
}
以下语句用于将函数/指针添加到向量中。
this->AlgoDB.push_back((fPtr) &this->Algo1);
这是传统的C语言风格的函数指针用法,我想使用 std::function
,现在向量和函数已经被修改如下:
typedef function<bool()> ffptr;
vector <ffptr> fAlgoDB;
function<bool()> SAlgos1::fAlgo1(){
cout << "Executing FAlgo1";
return true;
}
现在每当我使用以下声明时:
this->fAlgoDB.push_back(fAlgo1);
或this->fAlgoDB.push_back(&fAlgo1);
(强制转换也无济于事 - this->fAlgoDB.push_back((ffptr) this->fAlgo1);
)
我会收到以下错误提示:
error: taking address of temporary [-fpermissive]
和
error: could not convert 'true' from 'bool' to 'std::function<bool()>'
(即使我实际上没有调用该函数)每次交替编译都会出现。
如何将函数或函数指针存储在向量中?编译器试图传达什么意思?
fAlgo1
返回一个std::function
,但应该返回一个bool
。此外,你的原始代码甚至不能与成员函数一起使用,因为你必须在函数指针 typedef 中声明类的类型! - Felix Dombek(fPtr)
强制转换只是隐藏了您正在强制转换不兼容的内容的事实。最好不要使用 C 风格的强制转换! - Felix Dombek