2015-03-25 136 views
-11

在C++中使用以下術語時,我感到非常困惑,並且總是讓我從C++中退出並且只能回到C,Java,Python。這些C++語句是什麼意思?

任何人都可以解釋我爲什麼使用它?

的例子中,我通過閱讀一遍又一遍地學習這個項目:https://github.com/RSATom/WebChimera/blob/master/src/Chimera.cpp

1 - boost::shared_ptr<Chimera> thisPtr = FB::ptr_cast<Chimera>(shared_from_this());

2 - opts.set_enable_fs(allowfs.convert_cast<bool>());

3 -

typedef boost::optional<std::string> param_type; 
    typedef const FB::variant&   param_vtype; 

什麼點呢<Chimera> 1在做什麼? 點2中的<bool>在做什麼? 第4點是什麼意思?

+0

您應該閱讀'boost :: shared_ptr <>'模板的文檔。 – 2015-03-25 10:28:00

+3

你的問題中沒有「第4點」。 – milleniumbug 2015-03-25 10:40:11

+0

如果你想做任何不平凡的事情,C++不是一種可以浸入腳趾的語言。你需要閱讀至少一本書來獲得它。 – 2015-03-25 11:13:30

回答

3

假設你在談論this<syntax>,那麼這僅僅是templates的用法。模板是用C++編寫的方式generic types and functions

例如,std::vector(一個容器)是一個類模板。當你實例化它時,你需要指定它的通用參數。例如,您可以使用std::vector<int>vectorint),std::vector<bool>等。當您這樣做時,編譯器通過組合類模板和泛型參數來生成實際的類。

模板還有很多其他用法,包括C++ smart pointers。智能指針是一組提供自動和確定性內存管理的模板(例如,boost::shared_ptr是其中一個模板,boost::shared_ptr<bool>是由該模板生成的一種類型,具體用於bool值)。

基本上,您可以將模板視爲C宏的高級和更強大的對應模板。或者像Java's generics,但使用寬鬆打字(我會說這是類似於structural typing)和offering more flexibility

2

沒什麼特別的,真的。

boost :: shared_ptr只是在boost命名空間中聲明的類型。它來自於Boost C++ libraries,這是一套漂亮的實用程序庫,通過它的實用功能和類可以使編程變得更加簡單。

就像你寫std::cout如果你沒有申報using namespace std;

它基本上是東西是另一個命名空間的範圍之內宣佈,並通過運營商::你是在告訴編譯器到哪裏查找定義。

第2行僅僅是一個常規的函數調用,使用其參數的另一個函數調用的結果。

第3行是typedef,最有可能用於不必一直鍵入boost :: optional。而不是輸入boost::optional someName;,而是可以在此typedef後面寫param_type someName;

考慮閱讀一本書,而不是你在做什麼。如果您甚至不理解語言的語法,那麼將代碼放入也使用外部庫(如boost)的代碼是毫無意義的。

+1

'boost :: shared_ptr'不是一種類型。 – 2015-03-25 10:58:40

+1

Boost是一套圖書館。 – 2015-03-25 10:59:01

+1

否則一個很好的答案。 +1 – 2015-03-25 10:59:11