gpt4 book ai didi

function - 将 std::function 添加到向量 c++

转载 作者:行者123 更新时间:2023-12-02 09:12:45 24 4
gpt4 key购买 nike

我有一个包含函数指针的向量

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()>' (即使我没有真正调用该函数)对于每个替代编译。

如何在向量中存储函数或函数指针?编译器试图传达什么?

最佳答案

您的示例中有两个问题。

  1. 您将函数的返回类型从 bool 更改为至function<bool> 。只需将其保留为 bool ,因为这是您想要的返回类型。
  2. 成员函数指针的类型与函数指针不同(参见https://isocpp.org/wiki/faq/pointers-to-members#fnptr-vs-memfnptr-types)。这是因为成员函数总是传递 this指针作为参数。您需要绑定(bind)该参数(使用 std::bind ,请参阅 https://stackoverflow.com/a/7582576/6095394 )。

以下示例可以正常编译。

#include <functional>
#include <vector>
#include <iostream>

using namespace std;

class SAlgos1
{
typedef function<bool()> ffptr;

bool fAlgo1()
{
cout << "Executing FAlgo1";
return true;
}

void fillAlgoDB()
{
fAlgoDB.push_back(bind(&SAlgos1::fAlgo1, this));
}

vector<ffptr> fAlgoDB;
};

关于function - 将 std::function 添加到向量 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38973379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com