括号内括号内的含义是什么,以获得增强信号

What do parentheses mean within angle brackets for a Boost signal?

本文关键字:信号 增强 是什么      更新时间:2023-10-16

在我的基本C 书中,没有类似的类声明。对我来说,奇怪的代码是...

boost::signals2::signal<bool (const std::string& message, 
const std::string& caption, unsigned int style),
boost::signals2::last_value<bool> > ThreadSafeMessageBox;

圆括号中的事物(const std:::string ...)不是打字名称,而是实例。怎么可能?上面的代码填充了。

P.S。模板类(signal)代码是

template<typename Signature,
  typename Combiner = optional_last_value<typename boost::function_traits<Signature>::result_type>,
  typename Group = int,
  typename GroupCompare = std::less<Group>,
  typename SlotFunction = function<Signature>,
  typename ExtendedSlotFunction = typename detail::extended_signature<function_traits<Signature>::arity, Signature>::function_type,
  typename Mutex = mutex >
class signal: public detail::signalN<function_traits<Signature>::arity,
  Signature, Combiner, Group, GroupCompare, SlotFunction, ExtendedSlotFunction, Mutex>::type
{ /*...*};

查看boost.signals的文档2:

boost.signals2库是托管信号和插槽系统的实现。信号表示带有多个目标的回调

因此,我们知道"信号"与"回调"有关。回调是稍后致电的函数。

所以,然后在文档中查看" Hello World"示例:

struct HelloWorld
{
  void operator()() const
  {
    std::cout << "Hello, World!" << std::endl;
  }
};
// ...
  // Signal with no arguments and a void return value
  boost::signals2::signal<void ()> sig;
  // Connect a HelloWorld slot
  HelloWorld hello;
  sig.connect(hello);
  // Call all of the slots
  sig();

首先,我们创建一个信号sig,一个不需要参数并且具有void返回值的信号。接下来,我们使用connect方法将hello功能对象连接到信号。最后,使用信号sig像功能一样调用插槽,该插槽依次调用HelloWorld::operator()打印" Hello,World!"。

阅读了所有这些内容后,我们可以推断出什么?我们可以推断出模板参数到信号是函数类型。它指示可以连接到信号的功能的种类。

所以,在您的示例中

boost::signals2::signal<bool (const std::string& message, 
                             const std::string& caption, 
                             unsigned int style), 
                        boost::signals2::last_value<bool> 
                       > ThreadSafeMessageBox;

ThreadSafeMessageBox是一个可以连接到一个函数的信号:

  • 返回bool
  • 第一个论点 const std::string&
  • 第二个参数const std::string&
  • 采用unsigned int的第三个参数

(第二个模板参数我们可以出于此问题的目的而忽略,它不是必需的模板参数,也不是回调函数签名的一部分,而是所谓的组合签名)

预期为模板参数Signature的类型是函数签名,即预期函数参数编号,类型和返回类型的规范。

在您的情况下

boost::signals2::signal<bool (const std::string& message, const std::string& caption, unsigned int style), boost::signals2::last_value<bool> > ThreadSafeMessageBox;

模板boost::signals2::signal的第一个参数是函数签名:

bool (const std::string& message, const std::string& caption, unsigned int style)

这是一个具有3个参数(类型stringstringunsigned int)的函数,并返回bool