Boost事件处理之Boost.Signals

Boost事件处理之Boost.Signals
根据网址: Boost C++ 库 第 4 章 事件处理
示例代码
 1 #include <boost/signal.hpp> 
 2 #include <iostream> 
 3 
 4  void func() 
 5 { 
 6   std::cout << "Hello, world!" << std::endl; 
 7 } 
 8 
 9  int main() 
10 { 
11   boost::signal< void ()> s; 
12   s.connect(func); 
13   s(); 
14 } 


编译:$  g ++  Sample1 . cpp  - lboost_signals

一大堆提示信息:
/usr/local/include/boost/signal.hpp:17:4: warning: #warning "Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING."
口怕,实际上是提示我们Boost.Signals已经过期废弃不维护了,请选择用Boost.Signals2来替换。
首先,确定signal2位置:$ ls /usr/local/include/boost/signal2/
对,就是这个位置。
修改下原来代码
 1 #include <boost/signals2/signal.hpp> 
 2 #include <iostream> 
 3 
 4  void func() 
 5 { 
 6   std::cout << "Hello, world!" << std::endl; 
 7 } 
 8 
 9  int main() 
10 { 
11   boost::signals2::signal< void ()> s; 
12   s.connect(func); 
13   s(); 
14 } 

实际上修改的就是Line2和Line11,修改下include的signal.hpp文件位置以及命名空间
再编译: $ g++ Sample2.cpp -lboost_signals
现在OK,没有一大堆的warning了

后面再附加一个Functor的例子。
 1 #include <boost/signals2/signal.hpp>
 2 #include <iostream>
 3 
 4  int main() 
 5 {
 6    struct HelloWorld
 7   {
 8      void  operator()()  const {
 9       std::cout << "Hello, World!" << std::endl; 
10     }
11   };
12   
13   boost::signals2::signal< void()> sig;
14   HelloWorld hello;
15   sig.connect(hello);   //  Note,not "sig.connect(hello());"
16    sig();
17 
18    return 0;
19 }

编译: $ g++ Sample3.cpp -lboost_signals

你可能感兴趣的:(Boost事件处理之Boost.Signals)