首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在模板化成员函数上创建线程

在模板化成员函数上创建线程
EN

Stack Overflow用户
提问于 2021-03-06 08:29:21
回答 2查看 53关注 0票数 0

我有这个模板化的成员" function“,它的参数是一个对象实例和这个对象的成员函数(就像一个包装器):

代码语言:javascript
复制
class Monitor
{
    Monitor();
    ~Monitor();
    
    template <typename O, typename F>
    void (O object, F function)
    {
        object.function();
    }
}

如果我们有这样的类:

代码语言:javascript
复制
class Object
{
     Object();
     ~Object();

     function()
     {
          std::cout << "Do something" << std::endl;
     };
}

对此函数的调用将如下所示:

代码语言:javascript
复制
int main()
{
    Monitor monitor;
    Object object;
    
    monitor.waitData(object, function);

    return 0;
};

这就是问题所在。如果我想调用一个运行在成员函数"waitData“上的线程,它应该如何编写?

代码语言:javascript
复制
int main()
{
    Monitor monitor;
    Object object;
    
    // std::thread threadWait(monitor.waitData(object, function)) -> Obviously gets an error
    std::thread threadWait(???????);

    return 0;
};

提前谢谢。

EN

Stack Overflow用户

发布于 2021-03-06 08:37:49

您可以将其封装在lambda中:

代码语言:javascript
复制
std::thread threadWait([&]{
    monitor.waitData(object, function);
});

当然,需要考虑对象的生存期-在本例中,所有3个对象都是通过引用捕获的,这意味着它们需要在线程运行时保持不变。

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

https://stackoverflow.com/questions/66501221

复制
相关文章

相似问题

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