SlideShare una empresa de Scribd logo
1 de 45
Visual C++ 2005  上開發  C++  程式與  Boost Library  使用技巧   Birdman/ [email_address]
About Me ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
前言 ,[object Object],[object Object]
Outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
1. C++ 的美麗與哀愁 ,[object Object],[object Object],[object Object],[object Object],[object Object]
C++ 的特性 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
旅居地球的 C++ Masters ,[object Object],[object Object],Nicolai M. Josuttis  Daveed Vandevoorde  David R. Musser Todd Veldhuizen Bjarne Stroustrup Stan Lippman Andrei Alexandrescu Scott Meyers Herb Sutter
C++ 與 Library ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
C++ 小測驗 ,[object Object],[object Object],[object Object],template< int bit_size > struct integer { typedef mpl::list<char,short,int,long>  builtins_; typedef typename mpl::base< typename mpl::lower_bound< mpl::transform_view< builtins_ , mpl::multiplies< mpl::sizeof_<_1>, mpl::int_<8> > > , mpl::int_<bit_size> >::type >::type  iter_; typedef typename mpl::end<builtins_>::type last_; typedef typename mpl::eval_if< boost::is_same<iter_,last_> , mpl::identity< big_int<bit_size> > , mpl::deref<iter_> >::type  type ; };
2.  你的新武器 Boost Library ,[object Object],[object Object],[object Object]
Http://www.boost.org
3. Visual C++ 使用 Boost ,[object Object],[object Object],[object Object],[object Object],這個目錄就是 Source 所在位置 各 Library 文件與說明放這邊
4. 第一次 Boost 親密接觸 ,[object Object],[object Object],[object Object],[object Object]
Part 1: 字串處理 ,[object Object],[object Object]
Boost String Algorithms Library ,[object Object],#include <boost/algorithm/string.hpp> using namespace boost::algorithm; int main() { string str1(&quot;Visual C++, Boost, Birdman&quot;); vector< string > SplitVec;  split ( SplitVec, str1,  is_any_of (&quot;,&quot;) ); } for( int i=0;i<SplitVec.size();i++){ cout <<SplitVec[i] <<endl; } copy( SplitVec.begin(),  SplitVec.end(),  ostream_iterator<string>(cout, &quot;&quot;));
還有更多 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
數字轉字串 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Boost::lexical_cast  ,[object Object],[object Object],123  = lexical_cast< int >(&quot;123&quot;) 123  = lexical_cast< int >(L&quot;123&quot;) 1.23  = lexical_cast< double >(&quot;1.23&quot;) true  = lexical_cast< bool >('1') false  = lexical_cast< bool >('0') “ 1.23” = lexical_cast< std::string >(1.23) L'A'  = lexical_cast< wchar_t >(L'A') L&quot;1.11&quot;= lexical_cast< std::wstring >(1.11)
Type Casting ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Part 2: 任意型別 ,[object Object],int i = 10;  string str = &quot;Hi there&quot;;  Vector<boost::any> SuperContainer;  SuperContainer.push_back( boost::any(i)   ); SuperContainer.push_back( boost::any(str)   ); try {     if(SuperContainer[0].type() == typeid(int) )        i =  any_cast <int>(a1);     if(SuperContainer[0].type() == typeid(string) )        str =  any_cast <string>(a2);  }catch( bad_any_cast & e){     cout << &quot;Bad any cast!&quot;;  } int i = 10;  string str = &quot;Hi there&quot;;  vector< void* > SuperContainer;  SuperContainer.push_back(  static_cast<void*>(&i)   ); SuperContainer.push_back(  static_cast<void*>(&str)   ); cout << *( static_cast<int*> (SuperContainer[0])); cout << *( static_cast<string*> (SuperContainer[1])); 好可怕的轉型 !!!
Part 3 :  動態資源管理 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
請問哪個有問題 ?
寫程式要培養敏銳的 “嗅覺” ! ,[object Object],String EvaluateSalaryAndReturnName ( Employee e )  { TBird* pBird = new TBird; if( e.Title() == &quot;CEO&quot; || e.Salary() > 100000 ) { cout << e.First() << &quot; &quot; << e.Last() << endl; } delete pBird; return e.First() + &quot; &quot; + e.Last(); }
Exception-Safety  的重要性跟複雜性 ,[object Object],[object Object]
try-finally termination TStringList * ListHolder = new TStringList;  __try  {  // Do something  }  __finally  {  delete ListHolder;  };  TStringList * ListHolder = new TStringList;  try  {  // Do something  }  catch(…){   delete ListHolder;   };  delete ListHolder;
Example: STL auto_ptr auto_ptr<TStringList> ListHolder( new TStringList);   ListHolder->Add(&quot;String&quot;);  ListHolder->Add(“Hi ! Birdman&quot;);  … TStringList* ListHolder= new TStringList; __try {  ListHolder->Add(&quot;String&quot;);  ListHolder->Add(“Hi ! Birdman&quot;); …  // bala bala.. }__finally { delete ListHolder; }
Smart Pointer 通常沒有你想的那麼聰明 ! ,[object Object],Main (){ auto_ptr<TStringList> ListHolder( new TStringList);   ListHolder->Add(&quot;String&quot;);  ListHolder->Add(“Hi ! Birdman&quot;);  … ShowStringList( ListHolder ); … ListHolder->Add(“I am smart!&quot;);  }  ShowStringList ( auto_ptr<TStringList> p ) { … } auto_ptr 只要傳給其他函數,你就慘了 ~ ListHolder Main() p ShowStringList()
還好有 Boost ,[object Object],[object Object],Main (){ shared_ptr<TStringList> ListHolder( new TStringList);   ListHolder->Add(&quot;String&quot;);  ShowStringList( ListHolder ); … ListHolder->Add(“I am smart!&quot;);  }  ShowStringList ( shared_ptr<TStringList> p ) { … }
其他的 Smart Pointer ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Part 4: 還有一些小玩具 ,[object Object],[object Object],[object Object],[object Object]
boost/checked_delete.hpp ,[object Object]
實作 ,[object Object],[object Object],template<class T>  inline void checked_delete(T * x) { typedef char type_must_be_complete[  sizeof(T)? 1: -1  ]; (void)  sizeof (type_must_be_complete); delete x; }
不給你複製 !! noncopyable ,[object Object],Class TBirdman { … }; int main() { TBirdman SuperBird; Tbirdman Bird2( SuperBird );   // 我不希望使用者這麼做 }
5. C++ 幻術 –  Metaprogramming ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],template <class T>  class  String  { // stuff }; template <>  class  String<char>  { // stuff }; // primary template template <class T, class Allocator>  class  vector  { // stuff }; // partial specialization template <class Allocator>  class  vector<bool, Allocator>  { // stuff };
Meta-Programming :  ,[object Object],#include <iostream> using namespace std; template <unsigned int n, unsigned int f1 = 1, unsigned int f2 = 1> struct  fib_n  { const static unsigned int value = fib_n<n-1, f2, f1+f2>::value; }; template<unsigned int f1, unsigned int f2>  // F_0 = 1, F_1 = 1 struct  fib_n<0,f1,f2>  { const static unsigned int value = f1; }; int main() { cout << fib_n<0>::value << endl; cout << fib_n<1>::value << endl; cout << fib_n<2>::value << endl; cout << fib_n<3>::value << endl; cout << fib_n<4>::value << endl; }
Detecting Convertibility and Inheritance ,[object Object],[object Object],class TBird{…}; class TFlyingBird : public TBird{…}; class TBirdman{…}; class TSuperBirdman : private TFlyingBird{…}; --- cout << Conversion< TBirdman,   TBird >::exists; cout << Conversion< TFlyingBird,   TBird >::exists; cout << Conversion< TSupperBirdman,TBird >::exists;
Idea 1 ,[object Object],bool Conversion(U){return true;} Main() { T myT; cout << Conversion(myT); } bool Conversion(U){return true;} bool Conversion(…){return false;} Main() { T myT; cout << Conversion(myT); }
Idea 2 ,[object Object]
[object Object],給一個型別 T ,如得知它是 Polymorphic Class? Class TMother { virtual  void Chatter( TChild ); }; Class TBirdman { void Fly(); };
魔法般的 Boost  Lambda ,[object Object],[object Object]
Boost 是未來的標準嗎 ? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
你學到什麼 ? ,[object Object],[object Object]
Q&A Questions and Answers
Reference ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Más contenido relacionado

La actualidad más candente

認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算建興 王
 
Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI建興 王
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术bigqiang zou
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source ProjectsGeorge Ang
 
Python 入门
Python 入门Python 入门
Python 入门kuco945
 
xwz 2010-10-31
xwz 2010-10-31xwz 2010-10-31
xwz 2010-10-31carlxwz
 
Android C Library: Bionic 成長計畫
Android C Library: Bionic 成長計畫Android C Library: Bionic 成長計畫
Android C Library: Bionic 成長計畫Kito Cheng
 
漫談 Source Control Management
漫談 Source Control Management漫談 Source Control Management
漫談 Source Control ManagementWen-Shih Chao
 
Php设计模式介绍
Php设计模式介绍Php设计模式介绍
Php设计模式介绍cyf5513
 
C++11 smart pointers
C++11 smart pointersC++11 smart pointers
C++11 smart pointerschchwy Chang
 
页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式勇浩 赖
 
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。勇浩 赖
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhouWill Zhou
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析wavefly
 

La actualidad más candente (17)

認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
 
Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
 
Python 入门
Python 入门Python 入门
Python 入门
 
Dev307
Dev307Dev307
Dev307
 
xwz 2010-10-31
xwz 2010-10-31xwz 2010-10-31
xwz 2010-10-31
 
[系列活動] Python爬蟲實戰
[系列活動] Python爬蟲實戰[系列活動] Python爬蟲實戰
[系列活動] Python爬蟲實戰
 
Android C Library: Bionic 成長計畫
Android C Library: Bionic 成長計畫Android C Library: Bionic 成長計畫
Android C Library: Bionic 成長計畫
 
漫談 Source Control Management
漫談 Source Control Management漫談 Source Control Management
漫談 Source Control Management
 
Php设计模式介绍
Php设计模式介绍Php设计模式介绍
Php设计模式介绍
 
C++11 smart pointers
C++11 smart pointersC++11 smart pointers
C++11 smart pointers
 
页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式
 
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhou
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
Python 2-基本語法
Python 2-基本語法Python 2-基本語法
Python 2-基本語法
 

Destacado

Cara in d training manual
Cara in d training manualCara in d training manual
Cara in d training manualAzam Jafri
 
prezentarea mea
prezentarea meaprezentarea mea
prezentarea meadafina
 
Ectobal revitalization
Ectobal revitalizationEctobal revitalization
Ectobal revitalizationAzam Jafri
 
Presentación aeca
Presentación aecaPresentación aeca
Presentación aecaAndres Boone
 
Voorstelling eec rome bij bedevaart catechisten
Voorstelling eec rome bij bedevaart catechistenVoorstelling eec rome bij bedevaart catechisten
Voorstelling eec rome bij bedevaart catechistenAndres Boone
 
Importance of vitamin d in orthopaedic patients
Importance of vitamin d in orthopaedic patientsImportance of vitamin d in orthopaedic patients
Importance of vitamin d in orthopaedic patientsAzam Jafri
 
Importance of nutrition in pregnancy and lactation
Importance of nutrition in pregnancy and lactationImportance of nutrition in pregnancy and lactation
Importance of nutrition in pregnancy and lactationAzam Jafri
 
Importance of vitamin d in pregnancy and lactation
Importance of vitamin d in pregnancy and lactationImportance of vitamin d in pregnancy and lactation
Importance of vitamin d in pregnancy and lactationAzam Jafri
 
Selling Skills For New Med Reps
Selling Skills For New Med RepsSelling Skills For New Med Reps
Selling Skills For New Med RepsAzam Jafri
 

Destacado (13)

Social Networking and Community Building
Social Networking and Community BuildingSocial Networking and Community Building
Social Networking and Community Building
 
Cara in d training manual
Cara in d training manualCara in d training manual
Cara in d training manual
 
prezentarea mea
prezentarea meaprezentarea mea
prezentarea mea
 
Ectobal revitalization
Ectobal revitalizationEctobal revitalization
Ectobal revitalization
 
Borg cpd hammamet 2013 all slides
Borg cpd hammamet 2013 all slidesBorg cpd hammamet 2013 all slides
Borg cpd hammamet 2013 all slides
 
Incorporating project work (1)
Incorporating project work (1)Incorporating project work (1)
Incorporating project work (1)
 
Presentación aeca
Presentación aecaPresentación aeca
Presentación aeca
 
Scaffolding Students Writing
Scaffolding Students Writing Scaffolding Students Writing
Scaffolding Students Writing
 
Voorstelling eec rome bij bedevaart catechisten
Voorstelling eec rome bij bedevaart catechistenVoorstelling eec rome bij bedevaart catechisten
Voorstelling eec rome bij bedevaart catechisten
 
Importance of vitamin d in orthopaedic patients
Importance of vitamin d in orthopaedic patientsImportance of vitamin d in orthopaedic patients
Importance of vitamin d in orthopaedic patients
 
Importance of nutrition in pregnancy and lactation
Importance of nutrition in pregnancy and lactationImportance of nutrition in pregnancy and lactation
Importance of nutrition in pregnancy and lactation
 
Importance of vitamin d in pregnancy and lactation
Importance of vitamin d in pregnancy and lactationImportance of vitamin d in pregnancy and lactation
Importance of vitamin d in pregnancy and lactation
 
Selling Skills For New Med Reps
Selling Skills For New Med RepsSelling Skills For New Med Reps
Selling Skills For New Med Reps
 

Similar a ajax_onlinemad

C++工程实践
C++工程实践C++工程实践
C++工程实践Shuo Chen
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享Chong-Kuan Chen
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學Sita Liu
 
Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913lusecheng
 
电子杂志(试刊)
电子杂志(试刊)电子杂志(试刊)
电子杂志(试刊)ProCharm
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509tidesq
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺宗凡 楊
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺hydai
 
110922 knoss-vol26-c++运行库
110922 knoss-vol26-c++运行库110922 knoss-vol26-c++运行库
110922 knoss-vol26-c++运行库Zoom Quiet
 
C++模板与泛型编程
C++模板与泛型编程C++模板与泛型编程
C++模板与泛型编程deer hope
 
[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階Simen Li
 
Action script3.0中文版
Action script3.0中文版Action script3.0中文版
Action script3.0中文版coollen
 
Go语言: 互联网时代的C
Go语言: 互联网时代的CGo语言: 互联网时代的C
Go语言: 互联网时代的CGoogol Lee
 
Xcode开发员入门导引(简体中文版)
Xcode开发员入门导引(简体中文版)Xcode开发员入门导引(简体中文版)
Xcode开发员入门导引(简体中文版)babyyellow li
 
Xcode开发员入门导引
Xcode开发员入门导引Xcode开发员入门导引
Xcode开发员入门导引Sophia Lindsey
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojectsGeorge Ang
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗乐群 陈
 

Similar a ajax_onlinemad (20)

C++工程实践
C++工程实践C++工程实践
C++工程实践
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
 
Python Basic
Python  BasicPython  Basic
Python Basic
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學
 
Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913
 
[系列活動] Python 爬蟲實戰
[系列活動] Python 爬蟲實戰[系列活動] Python 爬蟲實戰
[系列活動] Python 爬蟲實戰
 
电子杂志(试刊)
电子杂志(试刊)电子杂志(试刊)
电子杂志(试刊)
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
 
110922 knoss-vol26-c++运行库
110922 knoss-vol26-c++运行库110922 knoss-vol26-c++运行库
110922 knoss-vol26-c++运行库
 
C++模板与泛型编程
C++模板与泛型编程C++模板与泛型编程
C++模板与泛型编程
 
[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階
 
Action script3.0中文版
Action script3.0中文版Action script3.0中文版
Action script3.0中文版
 
Go语言: 互联网时代的C
Go语言: 互联网时代的CGo语言: 互联网时代的C
Go语言: 互联网时代的C
 
Xcode开发员入门导引(简体中文版)
Xcode开发员入门导引(简体中文版)Xcode开发员入门导引(简体中文版)
Xcode开发员入门导引(简体中文版)
 
Xcode开发员入门导引
Xcode开发员入门导引Xcode开发员入门导引
Xcode开发员入门导引
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 

ajax_onlinemad

  • 1. Visual C++ 2005 上開發 C++ 程式與 Boost Library 使用技巧 Birdman/ [email_address]
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 23.
  • 24.
  • 25. try-finally termination TStringList * ListHolder = new TStringList; __try { // Do something } __finally { delete ListHolder; }; TStringList * ListHolder = new TStringList; try { // Do something } catch(…){ delete ListHolder; }; delete ListHolder;
  • 26. Example: STL auto_ptr auto_ptr<TStringList> ListHolder( new TStringList); ListHolder->Add(&quot;String&quot;); ListHolder->Add(“Hi ! Birdman&quot;); … TStringList* ListHolder= new TStringList; __try { ListHolder->Add(&quot;String&quot;); ListHolder->Add(“Hi ! Birdman&quot;); … // bala bala.. }__finally { delete ListHolder; }
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44. Q&A Questions and Answers
  • 45.