Time of Update: 2018-12-03
一.如何將程式檔案切割應將原有程式合理切割為三部分1.標頭檔:包含結構生命和使用這些結構的函數的原型。標頭檔常包含的內容函數原型使用#define或const定義的符號常量結構聲明類聲明模板聲明內嵌函式#include name.h#include <name.h><>首先在儲存標準標頭檔的目錄尋找,不加的則在目前的目錄或原始碼目錄尋找運用#ifdef
Time of Update: 2018-12-03
Any 標頭檔: "boost/any.hpp"類 any 允許對任意類型進行型別安全的儲存和取回。不象無類類型,any 儲存了類型資訊,並且不會讓你在不知道正確類型的情況下獲得存入的值。當然,有辦法可以讓你詢問關於類型的資訊,也有測試儲存的值的方法,但最終,調用者必須知道在 any 對象中的值的真實類型,否則不能訪問any。可以把 any 看作為上鎖的安全性。沒有正確的鑰匙,你不能進入其中。any 對它所儲存的類型有以下要求:CopyConstructible
Time of Update: 2018-12-03
C#調用C++寫的非託管的DLL中匯出的函數Platform invoke是一個使得Managed 程式碼(managed code)能夠調用DLL中實現的非託管函數(unmanaged functions)的服務(service),例如:那些Win32 API中的函數。它定位(locate)並且調用(invoke)匯出的函數,在需要的時候,跨越互動邊界列集(marshal)它的參數(integers, strings, arrays, structures等)。Platform invoke
Time of Update: 2018-12-03
眾所周知,C++函數重載時傳回值是不參與重載決議的, 也就是說:int lex_cast(const char*);double lex_cast(const char*);這樣兩個函數在同一個編譯單元同一個 namespace 中時, 會編譯報錯.怎麼辦呢?一個小技巧:#include <iostream>#include <string>#include <boost/lexical_cast.hpp>class my_cast { const
Time of Update: 2018-12-03
Part II: 容器及資料結構本部分討論三個庫:Boost.Any, Boost.Variant, 和 Boost.Tuple.
Time of Update: 2018-12-03
在 C 語言中實現模板函數的方法: 各種用 C 語言實現的模板可能在使用形式上有所不同。 現以一個求和函數 Sum 為例,用 C++ Template 可寫如下: template<class T, class R> R Sum(const T *array, int n){ R sum = 0; for (int i = 0 ; i < n ; ++i) sum += i;
Time of Update: 2018-12-03
Library 5.
Time of Update: 2018-12-03
C++ 中 lambda 可以直接傳遞給模板函數如 std::sort, 但無法傳給模板類如 std::map,但是,使用一點小技巧,可以使用 lambda 建立模板類的對象,省了很多麻煩的 coding。這裡給出一個樣本:#include <stdio.h>#include <map>template<class Key, class Value, class Compare>std::map<Key, Value, Compare> make_
Time of Update: 2018-12-03
C++中關於new和delete的使用來自網路:在C++中,可以使用new和delete動態建立和釋放數組或者單個對象,現在對它們的使用一一道來。 1.建立動態數組
Time of Update: 2018-12-03
目前已經全部完成,並且取得了非常好的效果 。使用該RPC的簡短代碼: rpc函數的傳回值是 rpc_ret_t,主要是為了避免專門為void傳回值的函數編寫特化代碼 //////////////////////////////////////////////////////////////////////////// sample usage...// test.h typedef std::vector<unsigned> vint_vec;class
Time of Update: 2018-12-03
EditPlus使用編輯Object C到官方網站下載http://www.editplus.com/javacpp.html安裝.stx和php.acp檔案。我的EditPlus安裝在C:\Program Files\EditPlus 3裡,那麼我就把下載下來的iphone.stx和iphone.acp檔案複製到C:\Program Files\EditPlus
Time of Update: 2018-12-03
C++中對象的拷貝一般使用拷貝建構函式,從而對象的拷貝大多是隱式的,使用拷貝建構函式的隱式拷貝很方便,但是編譯器無法識別不必要的拷貝,雖然我們人類可以識別這些不必要的拷貝,比如在寫函數原型時,忘了加&,就會引發一個這樣的非必要拷貝。如果這種情況很嚴重,我們可以禁用拷貝建構函式和賦值函數(聲明成private),然後再提供一個顯式拷貝函數,如:class HeavyObject { HeavyObject(const HeavyObject&);
Time of Update: 2018-12-03
C語言所有複雜的指標聲明,都是由各種聲明嵌套構成的。如何解讀複雜指標聲明呢?右左法則是一個既著名又常用的方法。不過,右左法則其實並不是C標準裡面的內容,它是從C標準的聲明規定中歸納出來的方法。C標準的聲明規則,是用來解決如何建立聲明的,而右左法則是用來解決如何辯識一個聲明的,兩者可以說是相反的。右左法則的英文原文是這樣說的: The right-left rule: Start reading the declaration from the
Time of Update: 2018-12-03
C++處理中文的問題困擾我很久了。之前一旦遇到中文基本就投諸java懷抱了。今天看到一個漂亮的c++程式,遂豁然開朗。總結一下分享給大家: 問題描述:c++ 中 char*/string 形式的字串無法正確的對中文字串進行處理(如 find, strlen, substr 等常規操作) 。比如當你在char* 中 find
Time of Update: 2018-12-03
毫不令人驚訝的是,C++又給了我一個驚訝! 對於被重載的虛函數(overloaded virtual member functions),Visual C++ 並不會依照它們聲明的順序排布在虛表中。 一組(同名的)重載虛函數會按照它們聲明的逆序依次排布在一起,而組與組之間的順序,是由組內最先出現的那個函式宣告的位置決定的,越先聲明,該組越靠前。 試看下面這個例子:#include <stdio.h>struct Base { virtual void
Time of Update: 2018-12-03
1,CVS cedet的最新代碼,1.04代碼補全很慢。 cvs -z3 -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet co -P cedet
Time of Update: 2018-12-03
C++ 標準委員會真是太死板了,既然給 C++ 增加了 lambda,就真的按部就班地套用 lambda 的標準定義,也不加個 lambda的自引用機制。找了半天,除了那些學院派的足以把99%的人搞暈的 Fix Point + Y combinator,一個最實用的解決方案就是把 lambda bind 到 std::function<...>.我那段需要 recursive lambda 的代碼: void print_output() const { // use
Time of Update: 2018-12-03
Time of Update: 2018-12-03
public繼承: 衍生類別成員可以訪問基類的public和protected成員不能訪問private成員; 衍生類別對象只能訪問基類的public成員protected繼承: 衍生類別成員可以訪問基類的public和protected成員不能訪問private成員: 衍生類別對象不能訪問基類的任何成員private繼承: 衍生類別成員可以訪問基類的public和protected成員不能訪問private成員:
Time of Update: 2018-12-03
//基類與衍生類別的對應關係//單繼承:衍生類別只從一個基類派生。//多繼承:衍生類別從多個基類派生。//多重派生:由一個基類派生出多個不同的衍生類別。//多層派生:衍生類別又作為基類,繼續派生新的類。//class 衍生類別名:繼承方式1 基類名1,繼承方式2 基類名2,...//{//