有没有一种方法可以使用对象及其非空参数列表调用运算符生成std :: thread?

掷石

我是std::threadC ++ 11的新手尝试从https://en.cppreference.com/w/cpp/thread/thread/thread的示例中弄些玩具,我试图查看是否可以std::thread使用带有非空参数列表的类成员函数调用运算符生成一个如下面的代码:

// main.cpp

#include <iostream>
#include <iostream>
#include <thread>

class Foo {
public:

  void operator()( int& i ) {
    std::cout << i << std::endl;
  }
};

int main( int argc, char* argv[] ) {
  Foo f;
  int i = 42;

  std::thread t1( f, i );
  t1.join();

  return 0;
}

错误消息是神秘的:

$ g++ --version && g++ ./main.cpp -lpthread && ./a.out
g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

In file included from /usr/include/c++/6/thread:39:0,
                 from ./main.cpp:5:
/usr/include/c++/6/functional: In instantiation of ‘struct std::_Bind_simple<Foo(int)>’:
/usr/include/c++/6/thread:138:26:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = Foo&; _Args = {int&}]’
./main.cpp:19:24:   required from here
/usr/include/c++/6/functional:1365:61: error: no type named ‘type’ in ‘class std::result_of<Foo(int)>’
       typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                             ^~~~~~~~~~~
/usr/include/c++/6/functional:1386:9: error: no type named ‘type’ in ‘class std::result_of<Foo(int)>’
         _M_invoke(_Index_tuple<_Indices...>)

相反,空的参数列表调用运算符可以正常工作:

// main.cpp

#include <iostream>
#include <iostream>
#include <thread>

class Foo {
public:

  void operator()() {
    std::cout << 42 << std::endl;
  }
};

int main( int argc, char* argv[] ) {
  Foo f;
  int i = 42;

  std::thread t1( f );
  t1.join();

  return 0;
}
$ g++ --version && g++ ./main.cpp -lpthread && ./a.out
g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

42

我的第一次尝试是否完全可行-我是否只有语法错误?有没有一种方法可以使用对象及其非空参数列表调用运算符生成std :: thread?


我认为这个问题与使用成员函数启动线程不同,因为这个问题专门涉及使用成员对象调用运算符生成线程,我知道这可以使用lambda来完成。

克里斯

std::thread除非您明确指出,否则不要让您通过引用,因为这是生命周期问题的简单来源。用于std::ref明确表示您i通过引用传递

std::thread t1( f, std::ref(i) );

或者,按值传递。在通过引用将某些内容传递给线程之前,请认真考虑并确保有必要。您传递的变量必须在线程内超过其使用期限。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以使用std :: sort()并仍然保持基于1的索引?

来自分类Dev

有没有一种安全的方法可以将std :: thread作为类的成员?

来自分类Dev

有没有一种方法可以使用mixin或模板从D中的类生成接口?

来自分类Dev

有没有一种方法可以实现和利用“非空合并”运算符?

来自分类Dev

有没有一种方法可以使用SKSpriteNode和PhysicsBody参数使用Spritekit制作软体?

来自分类Dev

有没有一种方法可以为重载运算符调用基本方法?C#

来自分类Dev

有没有一种方法可以使用NEWID函数生成GUID的列表?

来自分类Dev

有没有一种方法可以使用Djinn在Emacs中自动生成Haskell代码?

来自分类Dev

有没有一种方法可以使用流API将对象列表“扩展”为更大的列表?

来自分类Dev

有没有一种方法可以使用预处理器从符号的ascii编号生成一个类似+或-的运算符,而不包含该符号?

来自分类Dev

有没有一种方法可以使用PHP生成HTML以进行验证?

来自分类Dev

有没有一种方法可以保存带有参数的函数调用?

来自分类Dev

有没有一种方法可以使用IPython隐藏显示的对象?

来自分类Dev

有没有一种方法可以使用Docusign模板生成动态PDF

来自分类Dev

有没有一种方法可以使用运算符,这些运算符是R中数据框中的一列中的元素

来自分类Dev

有没有一种方法可以使Python列表需要某个对象?

来自分类Dev

有没有一种方法可以使用重载运算符作为比较的一部分

来自分类Dev

有没有一种方法可以使用对象的类型作为类型参数的参数?

来自分类Dev

有没有一种方法可以使用std :: sort()并仍然保持基于1的索引?

来自分类Dev

有没有一种方法可以使for循环沿列表的元素重复?

来自分类Dev

有没有一种方法可以将参数传递给is运算符?

来自分类Dev

有没有一种方法可以使html列表像这样

来自分类Dev

有没有一种方法可以实现和利用“非空合并”运算符?

来自分类Dev

有没有一种方法可以为重载运算符调用基本方法?C#

来自分类Dev

有没有一种方法可以使用lambda表达式在NameValueCollection中查找非空值

来自分类Dev

有没有一种方法可以使用NEWID函数生成GUID的列表?

来自分类Dev

有没有一种方法可以使用自定义分隔符进行选择

来自分类Dev

有没有一种方法可以保存带有参数的函数调用?

来自分类Dev

有没有一种方法可以使用索引对列表列表进行排序?

Related 相关文章

  1. 1

    有没有一种方法可以使用std :: sort()并仍然保持基于1的索引?

  2. 2

    有没有一种安全的方法可以将std :: thread作为类的成员?

  3. 3

    有没有一种方法可以使用mixin或模板从D中的类生成接口?

  4. 4

    有没有一种方法可以实现和利用“非空合并”运算符?

  5. 5

    有没有一种方法可以使用SKSpriteNode和PhysicsBody参数使用Spritekit制作软体?

  6. 6

    有没有一种方法可以为重载运算符调用基本方法?C#

  7. 7

    有没有一种方法可以使用NEWID函数生成GUID的列表?

  8. 8

    有没有一种方法可以使用Djinn在Emacs中自动生成Haskell代码?

  9. 9

    有没有一种方法可以使用流API将对象列表“扩展”为更大的列表?

  10. 10

    有没有一种方法可以使用预处理器从符号的ascii编号生成一个类似+或-的运算符,而不包含该符号?

  11. 11

    有没有一种方法可以使用PHP生成HTML以进行验证?

  12. 12

    有没有一种方法可以保存带有参数的函数调用?

  13. 13

    有没有一种方法可以使用IPython隐藏显示的对象?

  14. 14

    有没有一种方法可以使用Docusign模板生成动态PDF

  15. 15

    有没有一种方法可以使用运算符,这些运算符是R中数据框中的一列中的元素

  16. 16

    有没有一种方法可以使Python列表需要某个对象?

  17. 17

    有没有一种方法可以使用重载运算符作为比较的一部分

  18. 18

    有没有一种方法可以使用对象的类型作为类型参数的参数?

  19. 19

    有没有一种方法可以使用std :: sort()并仍然保持基于1的索引?

  20. 20

    有没有一种方法可以使for循环沿列表的元素重复?

  21. 21

    有没有一种方法可以将参数传递给is运算符?

  22. 22

    有没有一种方法可以使html列表像这样

  23. 23

    有没有一种方法可以实现和利用“非空合并”运算符?

  24. 24

    有没有一种方法可以为重载运算符调用基本方法?C#

  25. 25

    有没有一种方法可以使用lambda表达式在NameValueCollection中查找非空值

  26. 26

    有没有一种方法可以使用NEWID函数生成GUID的列表?

  27. 27

    有没有一种方法可以使用自定义分隔符进行选择

  28. 28

    有没有一种方法可以保存带有参数的函数调用?

  29. 29

    有没有一种方法可以使用索引对列表列表进行排序?

热门标签

归档