小编Ren*_*ene的帖子

将参数传递给std :: thread包装器

我想实现一个小线程包装器,如果一个线程仍处于活动状态,或者该线程已完成其工作,它将提供信息.为此,我需要将函数及其参数传递给线程类到另一个函数.我有一个简单的实现应该可以工作,但不能让它编译,我无法弄清楚该怎么做才能使它工作.

这是我的代码:

#include <unistd.h>
#include <iomanip>
#include <iostream>
#include <thread>
#include <utility>

class ManagedThread
{
public:
   template< class Function, class... Args> explicit ManagedThread( Function&& f, Args&&... args);
   bool isActive() const { return mActive; }
private:
   volatile bool  mActive;
   std::thread    mThread;
};

template< class Function, class... Args>
   void threadFunction( volatile bool& active_flag, Function&& f, Args&&... args)
{
   active_flag = true;
   f( args...);
   active_flag = false;
}

template< class Function, class... Args>
   ManagedThread::ManagedThread( Function&& f, Args&&... args):
      mActive( false),
      mThread( threadFunction< Function, …
Run Code Online (Sandbox Code Playgroud)

c++ c++14

6
推荐指数
3
解决办法
1452
查看次数

可变参数模板:将整数参数完美转发到lambda

有类似的问题,但我没有找到适用于我的问题的答案.

请考虑以下代码:

#include <cassert>
#include <functional>
#include <iostream>
#include <memory>
#include <utility>

class TestClass
{
public:
   TestClass( int value): mValue( value) { }
private:
   int  mValue;
};

template< typename T> class DeferredCreator
{
public:
   template< class... Args> DeferredCreator( Args&&... args):
      mpCreator( [=]() -> T*
         { return new T( std::forward< Args>( args)...);  }
      ),
      mpObject()
   { }

   T* get() {
      if (mpObject == nullptr)
         mpObject.reset( mpCreator());
      return mpObject.get();
   }
private:
   std::function< T*( void)>  mpCreator;
   std::unique_ptr< T>        mpObject;
};


int main() { …
Run Code Online (Sandbox Code Playgroud)

c++ c++14

6
推荐指数
2
解决办法
144
查看次数

标签 统计

c++ ×2

c++14 ×2