括号内括号内的含义是什么,以获得增强信号
What do parentheses mean within angle brackets for a Boost signal?
在我的基本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个参数(类型string
,string
和unsigned int
)的函数,并返回bool
。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 无法将结构注册为增强几何体3D点
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 如何将增强MSM与增强信号结合使用?
- 括号内括号内的含义是什么,以获得增强信号
- 连接来自未知类的成员函数以增强信号
- 增强信号2 跟踪
- 增强信号槽概括
- 在地图中存储增强::信号2信号
- c++11 信号是否等同于增强信号
- 增强信号2破坏安全
- 增强信号:在类接口中公开信号本身或连接/断开方法
- 如何使C++增强::信号从封装发出它的物体的物体中捕获
- 增强线程和信号处理
- 用min_element增强信号
- C++具有不同参数的增强信号和插槽