小编And*_*ard的帖子

用C ++ 11信号替换boost-signals2

我是一名研究人员,为无人驾驶汽车开发自动驾驶系统,并且正在修改另一个项目的一些开源代码,以制造用于车辆控制的驱动程序。这个想法是要有一个模块,该模块通常处理将特定于车辆的驾驶员加载为库的控制,并且现有实现使用boost :: signals2将模块函数调用绑定到驾驶员。因为这是当前唯一用于boost的东西,所以我想删除boost依赖并使用C ++信号,但是我很难弄清楚该怎么做。

我一直在尝试阅读boost :: signals2和C ++信号,以了解自己是否可以自学原理和语法:-https: //en.cppreference.com/w/cpp/utility/program/信号 - https://testbit.eu/2013/cpp11-signal-system-performance - https://simmesimme.github.io/tutorials/2015/09/20/signal-slot 我觉得我得到的概念,但是实现使tar混乱了。我发布的第一个和第二个资源使它看起来像C ++信号内置在C ++ 11中,但是第三个链接中的教程似乎定义了自己的信号类,并且似乎没有在第一个中使用语法所有。

看来其他项目之前(https://github.com/cinder/Cinder/issues/619)都已完成此操作,但我无法找到任何具体的示例来说明前后的比较-看到一个实现通常是使理论对我有效的方法。

从驱动程序库头文件中:

class InterfaceBase
{
   InterfaceBase( const Config& cfg );
   virtual ~InterfaceBase() { }

   boost::signals2::signal<void (const InterfaceState& state)> signal_state_change;
}
Run Code Online (Sandbox Code Playgroud)

从驱动程序cpp文件中:

void InterfaceBase::check_change_state()
{
   if( state_ != previous_state )
   {
      signal_state_change( state_ );
   }
}
Run Code Online (Sandbox Code Playgroud)

从模块cpp中:

template<typename Signal, typename Slot>
   void connect( Signal* signal, Slot slot )
{ signal->connect( slot ); }

template<typename Signal, typename Obj, typename A1>
   void connect( Signal* …
Run Code Online (Sandbox Code Playgroud)

c++ boost signals boost-signals2

2
推荐指数
1
解决办法
248
查看次数

标签 统计

boost ×1

boost-signals2 ×1

c++ ×1

signals ×1