C ++ boost :: thread operator()()问题

时间:2011-09-05 09:12:04

标签: c++ operator-overloading boost-thread

这是我第一次尝试使用boost :: threads,我有一个愚蠢的问题。 我调用boost:thread来使用我的一个模板类函数。但是在阅读this tutorial之后,它会说我构建了一个operator()()。 以下代码是否可以正常工作?

template <class S>
class SarsaL : public Task<S,Policy>, protected Method
{
  protected:
    ...
    void updateEpsilons(S* avoid);
    void step();
    ...
  public:
    ...
    void operator()();
    ...
};

template <class S>
void SarsaL<S>::operator()()
{
  updateEpsilons();
}

template <class S>
void SarsaL<S>::step()
{
   S* now_state =  Task<S,Policy>::checkIfAdd();
   ...
   ...
   boost::thread workerThread(&SarsaL<S>::updateEpsilons, this, now_state);
   ...
   ...
   workerThread.join();
}

我问的原因是因为我在没有参数的情况下在运算符中调用updateEpsilons(),但在创建线程时我发送参数now_state。这会起作用还是不论证?代码编译和执行没有错误,我只是感到困惑。

1 个答案:

答案 0 :(得分:2)

如果在要执行的对象上提供方法(在本例中为operator()()),则不必使用updateEpsilons。显然,此operator()()不正确,因为它没有使用参数调用相应的updateEpsilons方法。

请注意,在本教程中,创建了新线程,只提供了一个类的实例,而没有方法。在这种情况下,类必须实现operator()(),这将是线程代码的调用。