原创 淺談C與C++的設計與編程風格(一)

一直想寫一些比較C和C++設計與編程風格的文字,正好近來工作任務不多,能夠有時間重新整理一下自己所學的東東,於是便決定開始寫這個題目,而目的僅僅只是打算能就這個話題和大家討論討論,拋磚引玉、增長個人的見識。首先想說明一下,個人是C++設計

原创 淺談C與C++的設計與編程風格(二)

上次總結了C++(面向對象)設計的核心思想,並且例舉了使用類模型來替代if和switch的一種較爲典型的情況。下面想來談談C++在編碼方面的特點。在很多經典的C++教程中都有一個建議:應儘量使用戶代碼(庫的使用者)看起來短小而簡單。按照常

原创 好書推薦:《大數據時代》

這不是一本關於“大數據”概念的教科書, 也不是一本關於數據挖掘的原理書, 也不是一本關於IT技術發展趨勢的預言書, 也不是一本關於互聯網大鱷發家史的

原创 數據結構與程序架構(六)

我們知道,對於一個數據流圖來說,我們需要知道它的處理單元間傳遞的數據類型,否則我們不一定能清晰地理解它的功能和處理過程,那麼如何描述一個數據類型呢? 在絕大多數高級編程語言中,數據類型都是以樹的形式進行描述的,比如以C語言爲例,它的數據類

原创 C++語言中的元類編程(三)

現在讓我們回到最初的問題,既然我們已經定義了元類,那麼我們是不是可以開始着手解決問題了呢?先彆着急,我們還需要再瞭解一個元類編程中非常重要的概念:切入點。 在很多的元類(或面向方面)編程的書和文章中,有關於切入點的非常詳細的說明,因此我這

原创 如何利用 release 版本的 backtrace 來定位 android NDK 程序的崩潰位置

我們知道 android NDK 程序在崩潰時會生成一個 tombstone 的 backtrace (也可利用 ADB logcat 抓取),從這個 backtrace 中我們可以瞭解是哪個函數引發的崩潰,但是通常由於我們發佈時都是 r

原创 數據結構與程序架構(五)

上篇文章中,我們以一個例子說明了如何運用“需求驅動”的設計思想和算法,接下來,我們需要討論如何用數據結構來定義一個拓撲結構。 正如世間的萬事萬物都由原子組成,任何(複雜的)拓撲結構都可以分解爲以下四種結構: 1)鏈式結構;2)一對多結構;

原创 C++語言中的元類編程(五)

在上一節中,我們得到了meta_worker的第一個版本,但是那個版本還不能使用,因爲它只有對worker類的描述信息(除regCutPoint外),我們還需要爲它添加一些方法去操作它的對象(注意,它的對象不是worker類的對象,而是w

原创 數據結構與程序架構(二)

在上篇文章中,我們通過一個簡單例子演示了從數據結構的角度來思考我們的程序架構的優勢,然而,由於上一個例子過於簡單,你可能會認爲,這和我們(在架構設計時)常用的Callback機制有什麼差別呢?事實上,它們之間是有差別的,Callback機

原创 一種通用的樹形二進制協議描述方法與處理算法

概述: 本方法定義了一種數據結構,可用於描述任意的樹形二進制協議,並配合一個特定的處理算法,可實現一種通用的,由該種樹形二進制協議定義的比特流解析與填充的處理,該數據結構的定義如下: /* 以下結構用於定

原创 C++語言中的元類編程(二)

現在讓我們來舉一個具體的例子,來體會元類編程思想的冰山一角。 我們知道,日誌對於調試和維護一個程序具有非常重要的作用,傳統編程方法中,我們通常在需要輸出一個日誌的位置調用一個輸出日誌的函數,如下面的代碼:  void foo() { //

原创 C++語言中的元類編程(四)

爲了方便演示,讓我們先隨便假定一個簡單的應用場景:假定在我們的應用場景中有一個叫worker的類,它可以保存某個工人的名字,並在需要時打印出這個名字,它的源碼如下: class worker {     char mMyName[100]

原创 C++語言中的元類編程(六)

現在是我們考慮支持切入點的時候了,結合第三篇中對切入點的討論,在我們的meta_worker類中加入切入點的調用應該不難,只需修改say_hello_closure和meta_worker::getMethod兩個函數即可: templa

原创 C++語言中的元類編程(八)

這篇的重點內容是講解算法,但是在正式開始之前,我強烈建議你再回顧一下上一篇的內容,因爲要理解這個算法,就需要意識到協議的具體細節不重要,重要的是這種協議是否可以用一種樹形結構來表達,而且在這個結構中,每一個節點(即field)要麼是一個必

原创 C++語言中的元類編程(九)

本來打算就此結束這一題目的討論,但是突然想到自己忘記了一個很重要的問題,即程序執行效率和算法優化的問題,在很多情況下,程序執行效率是一個不可忽視的問題,上篇文字介紹的樹形協議通用算法雖然比較簡單,但是可能有些朋友會懷疑其執行效率,這種懷疑