尝试将参数传递给方法时出现“调用隐式删除的副本构造函数”错误

atari83

我正在尝试为我的应用程序使用CPTL线程池。

所以,我有这个定义的功能:

static void Invoke( int id, std::unique_ptr<BaseService> svc );

并尝试将其传递给CPTL“推”方法以在线程池中排队:

pThreadPool->push( std::ref(App::Invoke), std::move( svc ) );

但是我收到了这个错误:

/home/hadi/CLionProjects/App/App.cpp:211:27: error: no matching member function for call to 'push'
    pThreadPool->push( std::ref(App::Invoke), std::move( svc ) );
    ~~~~~~~~~~~~~^~~~
/home/hadi/CLionProjects/App/include/cptl/ctpl.h:152:14: note: candidate template ignored: substitution failure [with F = std::__1::reference_wrapper<void (int, std::__1::unique_ptr<BaseService, std::__1::default_delete<BaseService> >)>, Rest = <std::__1::unique_ptr<BaseService, std::__1::default_delete<BaseService> >>]: call to implicitly-deleted copy constructor of 'std::__1::unique_ptr<BaseService, std::__1::default_delete<BaseService> >'
        auto push(F && f, Rest&&... rest) ->std::future<decltype(f(0, rest...))> {
             ^                                                        ~~~~
/home/hadi/CLionProjects/App/include/cptl/ctpl.h:171:14: note: candidate function template not viable: requires single argument 'f', but 2 arguments were provided
        auto push(F && f) ->std::future<decltype(f(0))> {
             ^
1 error generated.

有人可以告诉我如何解决这个问题吗?谢谢。

生锈的

看来CPTL在第152行有一个bug或不支持仅移动参数(无法在其上找到任何文档,所以不能确定):

    auto push(F && f, Rest&&... rest) ->std::future<decltype(f(0, rest...))> {

即使push使用std::forward<Rest>(rest)...在调用,它使用rest...在SFINAE,这将失败,不包括从可行的候选人名单的过载。

通常,打包任务的参数存储在队列中,因此需要可复制。unique_ptr由于它不可复制(这是唯一的!),因此排除了使用

作为解决方法,您可以使用shared_ptr或,如果生存期svc超过了线程池的生存期,则可以使用原始指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误:调用“ Cadena”的隐式删除副本构造函数

来自分类Dev

隐式地将参数传递给基本构造函数

来自分类Dev

调用LLVM中隐式删除的副本构造函数

来自分类Dev

gmock调用到隐式删除的副本构造函数

来自分类Dev

将参数传递给方法时出现错误“调用中的附加参数”

来自分类Dev

将参数传递给方法时出现错误“调用中的附加参数”

来自分类Dev

在传递给参数时,为什么不能在给定合适的构造函数的情况下隐式构造对象?

来自分类Dev

将参数传递给C语言函数时的隐式转换

来自分类Dev

隐式与显式删除副本构造函数

来自分类Dev

隐式删除的副本构造函数编译错误,返回的指针值

来自分类Dev

尝试写入作为参数传递给函数的范围时,为什么会出现1004错误?

来自分类Dev

拦截C ++隐式副本构造函数,或调用其功能

来自分类Dev

这是隐式调用副本构造函数吗?

来自分类Dev

将原子传递给可变参数时,为什么要调用复制构造函数?

来自分类Dev

移动构造函数(错误:调用隐式删除的拷贝构造函数)

来自分类Dev

Coffeescript中的承诺。尝试将多个参数传递给“然后”时出现“意外逗号”错误?

来自分类Dev

在使用axios的React中尝试将多个参数传递给获取请求时出现415错误

来自分类Dev

错误:隐式声明的副本构造函数的定义

来自分类Dev

从定义的副本构造函数调用默认(隐式)副本构造函数

来自分类Dev

尝试将目录名称传递给函数时出现“是目录”错误

来自分类Dev

当没有__init__方法时,为什么此代码将参数传递给构造函数?

来自分类Dev

将构造函数参数传递给方法JAVA

来自分类Dev

将参数传递给 Python 线程时出现类型错误

来自分类Dev

您可以直接将非隐式val作为参数传递给需要隐式的函数吗?

来自分类Dev

调用装饰函数时将参数传递给装饰器

来自分类Dev

将参数传递给类构造函数

来自分类Dev

为什么类中的ostringstream类型的成员导致“调用隐式删除的复制构造函数”错误?

来自分类Dev

将变量传递给函数时出现500错误

来自分类Dev

将指针传递给函数时出现分段错误

Related 相关文章

  1. 1

    错误:调用“ Cadena”的隐式删除副本构造函数

  2. 2

    隐式地将参数传递给基本构造函数

  3. 3

    调用LLVM中隐式删除的副本构造函数

  4. 4

    gmock调用到隐式删除的副本构造函数

  5. 5

    将参数传递给方法时出现错误“调用中的附加参数”

  6. 6

    将参数传递给方法时出现错误“调用中的附加参数”

  7. 7

    在传递给参数时,为什么不能在给定合适的构造函数的情况下隐式构造对象?

  8. 8

    将参数传递给C语言函数时的隐式转换

  9. 9

    隐式与显式删除副本构造函数

  10. 10

    隐式删除的副本构造函数编译错误,返回的指针值

  11. 11

    尝试写入作为参数传递给函数的范围时,为什么会出现1004错误?

  12. 12

    拦截C ++隐式副本构造函数,或调用其功能

  13. 13

    这是隐式调用副本构造函数吗?

  14. 14

    将原子传递给可变参数时,为什么要调用复制构造函数?

  15. 15

    移动构造函数(错误:调用隐式删除的拷贝构造函数)

  16. 16

    Coffeescript中的承诺。尝试将多个参数传递给“然后”时出现“意外逗号”错误?

  17. 17

    在使用axios的React中尝试将多个参数传递给获取请求时出现415错误

  18. 18

    错误:隐式声明的副本构造函数的定义

  19. 19

    从定义的副本构造函数调用默认(隐式)副本构造函数

  20. 20

    尝试将目录名称传递给函数时出现“是目录”错误

  21. 21

    当没有__init__方法时,为什么此代码将参数传递给构造函数?

  22. 22

    将构造函数参数传递给方法JAVA

  23. 23

    将参数传递给 Python 线程时出现类型错误

  24. 24

    您可以直接将非隐式val作为参数传递给需要隐式的函数吗?

  25. 25

    调用装饰函数时将参数传递给装饰器

  26. 26

    将参数传递给类构造函数

  27. 27

    为什么类中的ostringstream类型的成员导致“调用隐式删除的复制构造函数”错误?

  28. 28

    将变量传递给函数时出现500错误

  29. 29

    将指针传递给函数时出现分段错误

热门标签

归档