Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将函数放入模板_C++_Class_Templates - Fatal编程技术网

C++ 将函数放入模板

C++ 将函数放入模板,c++,class,templates,C++,Class,Templates,我找到了一个线程池类,并尝试了多种组合来调用包含函数的方法 以下是我的尝试示例: WorkerPool wp(4); wp.run_task<Connection::On_NET1_LOGIN>(&On_NET1_LOGIN()); WorkerPool可湿性粉剂(4); wp.run_任务(&On_NET1_LOGIN()); 以下是WorkerPool的功能: template < typename Task > void run_task( Tas

我找到了一个线程池类,并尝试了多种组合来调用包含函数的方法

以下是我的尝试示例:

WorkerPool wp(4);
wp.run_task<Connection::On_NET1_LOGIN>(&On_NET1_LOGIN());
WorkerPool可湿性粉剂(4);
wp.run_任务(&On_NET1_LOGIN());
以下是WorkerPool的功能:

 template < typename Task >
  void run_task( Task task )
  {
    boost::unique_lock< boost::mutex > lock( mutex_ );

    // If no threads are available, then return.
    if ( 0 == available_ ) return;

    // Decrement count, indicating thread is no longer available.
    --available_;

    // Post a wrapped task into the queue.
    io_service_.post( boost::bind( &WorkerPool::wrap_task, this,
                                   boost::function< void() >( task ) ) );
  }

private:
  /// @brief Wrap a task so that the available count can be increased once
  ///        the user provided task has completed.
  void wrap_task( boost::function< void() > task )
  {
    // Run the user supplied task.
    try
    {
      task();
    }
    // Suppress all exceptions.
    catch ( ... ) {}

    // Task has finished, so increment count of available threads.
    boost::unique_lock< boost::mutex > lock( mutex_ );
    ++available_;
  }
模板
无效运行任务(任务任务)
{
boost::unique_locklock(互斥锁);
//如果没有可用的线程,则返回。
如果(0==可用),返回;
//递减计数,表示线程不再可用。
--可用的;
//将包装好的任务发布到队列中。
io_服务uu.post(boost::bind(&WorkerPool::wrap_任务,这个,
boost::function(task));
}
私人:
///@brief包装任务,使可用计数增加一次
///用户提供的任务已完成。
void wrap_任务(boost::function任务)
{
//运行用户提供的任务。
尝试
{
任务();
}
//抑制所有异常。
捕获(…){}
//任务已完成,因此增加可用线程的计数。
boost::unique_locklock(互斥锁);
++可用的;
}
在调用该线程池的函数时,我做错了什么?
谢谢。

您正在尝试添加以下任务:

wp.run_task<Connection::On_NET1_LOGIN>(&On_NET1_LOGIN());

注意:由于登录时的
似乎是
连接的一个成员函数
,因此除非该函数是
静态的
,否则该函数将不起作用。如果不是这样,则需要一个
连接
实例来调用函数,并且需要发送一个函数对象来执行此操作。可以使用lambda或
std::bind解决此问题

错误消息是什么?
wp.run_task(&Connection::On_NET1_LOGIN);