gpt4 book ai didi

c++ - 在类中设置PubSubClient API的回调函数

转载 作者:行者123 更新时间:2023-11-28 01:17:23 26 4
gpt4 key购买 nike

我想在类构造函数中调用 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/

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