eigen是常用的線性代數計算庫,而且是header-only,意即其只有標頭檔案,沒有對應的cpp/cc檔案。eigen目前仍在不斷穩定的迭代,截止目前迭代到3.4.0。eigen擁有完善的文件,高質量的**,是開源軟體的優秀典範。一次在專案中用到eigen並且在學習模板元程式設計時,接觸到crtp等概念,遂激發興趣想深入了解eigen並將自己閱讀eigen過程中總結記錄下來。
eigen的目錄結構分為兩大部分src和標頭檔案,如下圖所示。標頭檔案按照具體功能劃分,使用者使用時將其包含在內即可,如客戶想使用特徵值計算,那麼就直接#include即可;src是對應的實現。
src雖然是對應的實現,但是卻沒有乙個cpp/cc檔案,那麼這麼多頭檔案怎麼組織好包含關係呢?eigen給出的答案是,在對外標頭檔案中按照依賴關係排列標頭檔案順序。
以core模組為例,該模組定義了eigen核心資料結構和基本功能。eigen/src/matrix.h定義了矩陣,其定義如下:
templateint rows_, int cols_, int options_, int maxrows_, int maxcols_>但是我們發現,matrix.h並沒有直接#include。開啟eigen/core,我們就可以發現如下結構class
matrix
: public plainobjectbase>
當使用者將eigen/core包含在自己的檔案中,編譯時標頭檔案的**一經展開,plainobjectbase便是已經宣告並定義好的了,所以客戶端**並不會發生鏈結問題。需要注意的是,如果客戶只include其中乙個檔案比如matrix.h,此時就會發生鏈結問題,因為找不到plainobjectbase。這樣做的好處是減少了各檔案之間的編譯依賴關係。
openfire原始碼解讀一 專案啟動
一 org.jivesoftware.openfire.starter.serverstarter中的main啟動 二 首先獲得classloader 類載入器 classloader的知識。三 獲取當前類的類載入器的方法 private classloader findparentclassloa...
軟體專案管理之一 專案進度計畫
兩年前買的一本軟體專案管理看完後就扔在櫃子裡,最近又拿來起來,結合目前自己帶的團隊中的一些情況,頗有感觸,於是決定寫點東西。有些專案負責人經常抱怨專案的進度無法控制,專案各階段schedule無法設定,即使設定了專案也無法按既定目標來走。在我看來,這些都有其罪惡的根源,問題的關鍵是專案進度計畫沒有做...
一 專案概覽
鏈結1 密碼 1zrc 鏈結2 密碼 43bo 02 天天生鮮資料庫設計 待完善 03 使用者註冊 待完善 04 使用者登入 待完善 05 使用者中心 待完善 06 分布式fastdfs檔案系統 待完善 07 天天生鮮首頁 待完善 08 天天生鮮詳情頁 待完善 09 天天生鮮列表頁 待完善 10 天...