传递参数,以提高::线程没有重载函数需要两个参数(Passing parameter to boos

2019-07-21 02:42发布

从升压::线程文件似乎我可以这样传递参数给线程函数:

boost::thread* myThread = new boost::thread(callbackFunc, param);

然而,当我这样做,编译器抱怨

没有过载功能需要两个参数

我的代码:

#include <boost/thread/thread.hpp>
void Game::playSound(sf::Sound* s) {
    boost::thread soundThread(playSoundTask, s);
    soundThread.join();
}

void Game::playSoundTask(sf::Sound* s) {
    // do things
}

我使用的是与OGRE3D来推动的副本,我想可能是非常古老。 有趣的是,虽然,我看了看thread.hpp,它确实有2个或多个参数的构造函数模板。

Answer 1:

的问题是,成员函数采取一个隐含的第一参数Type* ,其中Type是类的类型。 这是由成员函数被调用上的类型的实例机制,意味着你必须通过一个额外的参数给boost::thread构造函数。 你也必须通过成员函数的地址&ClassName::functionName

我做了一个小的编译和运行的例子,我希望说明了如何使用:

#include <boost/thread.hpp>
#include <iostream>

struct Foo
{
  void foo(int i) 
  {
    std::cout << "foo(" << i << ")\n";
  }
  void bar()
  {
    int i = 42;
    boost::thread t(&Foo::foo, this, i);
    t.join();
  }
};

int main()
{
  Foo f;
  f.bar();
}


文章来源: Passing parameter to boost::thread no overloaded function takes 2 arguments