我想在类构造函数中调用 setCallback()
函数,并将私有(private)方法作为参数。由于函数所需的函数签名,这不起作用。我的函数问题是我无法访问我的类的特定对象的私有(private)字段。
我已经尝试在类文件中创建一个简单的函数,但由于静态上下文而无法正常工作。我还尝试过只传递一个由于签名而不起作用的方法。
#include <PubSubClient.h>
class Test
{
private:
void callback(char *topic, uint8_t *payload, unsigned int)
{
// things
}
public:
Test(PubSubClient psc)
{
psc.setCallback(callback);
}
};
出现如下编译错误。
no suitable constructor exists to convert from "void (char *topic, uint8_t *payload, unsigned int)" to "std::function<void (char *, uint8_t *, unsigned int)>"
最佳答案
我不熟悉 arduino 编程所以我的回答假设你指的是 this类(class)。另外,我不知道您的样本是否有意使用 PubSubClient 的值进行构造?据我所知,它应该是一个引用或指针,例如
Test(PubSubClient& psc)
{
psc.setCallback(callback);
}
错误消息很好地解释了问题所在。 setCallback() 方法需要一个 std::function 并且它不能从类成员函数的值创建一个。 example section of std::function cppreference为您提供了多种不同的方法来制作 std::function。如果您确定您的 Test 对象与 PubSubClient 一样长,那么我建议使用 std::bind 示例,例如
Test(PubSubClient& psc)
{
using std::placeholders::_1;
using std::placeholders::_2;
using std::placeholders::_3;
psc.setCallback(std::bind( &Test::callback, this, _1,_2,_3));
}
关于c++ - 在类中设置PubSubClient API的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58233146/