首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非静态成员函数的无效使用-如何将成员函数的函数指针传递给非成员函数?

非静态成员函数的无效使用-如何将成员函数的函数指针传递给非成员函数?
EN

Stack Overflow用户
提问于 2021-05-10 08:32:55
回答 3查看 372关注 0票数 1

我有以下成员函数,其中fcn()调用接受函数指针的xTaskCreate(),在本例中是process,它恰好也是一个成员函数。

问题是,从技术上讲,process()本身只有一个参数void *arg),但是当传递成员函数时,*this也会被额外传入,这目前正在造成问题。

按照原样,错误显示为invalid use of non-static member function A::process(void *arg)

也许一种方法是使process()成为一个静态成员函数,但这意味着我将不能使用它内部的任何其他成员变量。

代码语言:javascript
复制
void A::fcn()
{
  if (pdPASS != xTaskCreate(process, "PROCESS_LOG", 256, NULL, 5, &td))
    {
        // ...
    }
}

void A::process(void *arg)
{
  bar(someClassMember);
}

编辑:

xTaskCreate是一个基于C的FreeRTOS内核函数。

代码语言:javascript
复制
typedef void (*TaskFunction_t)( void * );

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                            const char * const pcName,      /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                            const configSTACK_DEPTH_TYPE usStackDepth,
                            void * const pvParameters,
                            UBaseType_t uxPriority,
                            TaskHandle_t * const pxCreatedTask )
EN

Stack Overflow用户

发布于 2021-05-10 22:37:24

传递给xTaskCreate()void*参数旨在将任意数据传递给任务函数。您传递的数据类型总是在您方便的时候使用,some programmer dude提供的solution使用这种方法。这是在C/C++之间实现此接口的通用方法。

如果您想要移动到更高的抽象级别,可以看看freertos-addons项目。它最近并不活跃,但是线程抽象可以帮你完成这项工作。

您还可以查看CodeProject的文章FreeRTOS Thread Pack: Create Multithreaded IoT Code The Easy Way,了解结合了几种技术的另一种方法,比如使用lambda表达式定义任务函数,以及创建线程池。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67463464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档