精華區beta Programming 關於我們 聯絡資訊
其實我還沒到你說的那種境界的說,論開發實務, 我經驗很不夠的。不過您這篇我會存起來,因為以後還是會很有機會用到。 謝謝你^___^ 主要是三件事來講 1.指導小弟的人說,合作做系統開發是要用分層的架構 2.我把每個可以獨立出來使用的IC,都有自己的一個目錄與其對應的.so 3.如果說把全部的程式碼都全寫在一個檔案下我懂,但許多檔案時便知自己沒概念 +++++++ 以下是對1. 2. 3. 特別說明 +++++++ 1.指導小弟的人說,合作做系統開發是要用分層的架構 ==================================== 其實,我也是第一次開發這種大程式的 我作東西是與人有分層,而層與層之間是使用callback機制 而callback機制的實用是用傳統的方式 就是 concrete class 去繼承一個原本已經談好的abstract class 而下層要將資料傳到上層的時候 下層的人只要去呼叫 the pointer to object of abstrct class 上的pure virtual function 即可 而concrete class 則是由上層的人來實現。 這concrete class 與 abstract class是分別定義在不同的 .h檔裡的 而concrete class的實作 本身就要使用到 非常多的 .h檔 這些.h檔含有很多class,但是這些class彼此之間又很頻繁的要去使用到 別個.h檔 的class 作P 或者 像 P* 之類的指標參數 這些是我還沒使用 template的。 =================================================== 2.我把每個可以獨立出來使用的IC,都有自己的一個目錄與其對應的.so ================================================================ 我寫template的部份,是在於一些比較獨立好用的東西,會寫template 真的程度可能就是停留在"巨集"的概念吧 >"< 譬如在 ./includexr 下有五個檔 xxx.h xxx.cpp Templates.cpp rrr.h rrr.cpp g++ -c xxx.cpp -fPIC 作成xxx.o檔 g++ -c rrr.cpp -fPIC 作成rrr.o檔 g++ -c Templates.cpp -fPIC 作成Templates.o,所以需要instantiate的就都寫這邊。 g++ xxx.o rrr.o Templates.o -shared -o "libxr.so" 作出 libxr.so檔 cp libxr.so ../libs 所以./ 目錄下的main.cpp有要使用這.so檔裡面東的話 就可以這麼作 在main.cpp 裡面多加 #include "includexr/xxx.h" #include "includexr/rrr.h" 最後連結時就用如下方式即可 g++ -o main.cpp -Llibs -lxr 譬如這些template class 可能有一堆不一樣的人開發而成時 就把每個人開發的東西自訂一個目錄,因為最後都可以作出.so 檔 所以我就在每個目錄寫個很單純的shell script,故每個目錄下的instantiate都可調整 只要我把該include到的.h檔都include到,而不同人開發的東西又放在不同目錄 最後我就 透過 g++ -o main.cpp -Llibs -lxr -lxr2 -lxr3 ... 這樣子的方式都串聯起來。 ==================================================================== 3.如果說把全部的程式碼都全寫在一個檔案下我懂,但許多檔案時便知自己沒概念 ======================================================================= 我總是對於這種牽址到要跨資料夾的,很理不出頭緒 而我對編譯的概念一直不是很搞的清楚,有時候自己只會知道,這邊如果沒宣告會錯 這邊如果沒有include會錯,但是就是不能曉得說,是編譯跟連結間,他們的原理是怎樣 ,因此我們才知道 什麼時候 要include ,什麼時候要 宣告。 然後像別人如果又來搞個全域變數的東西時,可能又變成說摸索怎樣去compile 才把這全域變數用進來。這樣都是一直try and try的 但是不是說如果有聽編譯器的課,可能就會比較清楚知道,什麼時候自己要幹嘛 就不用一直不斷的try了呢? 因為指導的人本身沒有許多檔案下的開發經驗, 所以我一直在研究怎樣才能夠順利的在多檔案下開發, 也許就是因為沒概念又經驗不夠,所以開發的動點總是變成在處理這一堆檔案。 ================================================================== ※ 引述《[email protected] (汀)》之銘言: : ※ 引述《[email protected] (10/100天自我觀察)》之銘言: : 其實啦,其實呢..... : 剛看到上面的兩個 styles 時就知道你想幹嘛了, : 但是很遺憾大家慣用的寫法還是 style 1, : 出現需要用到 style 2 的情形, : 通常就是所謂的程式結構設計不良, : 你需要一些中介層或抽象層來解決這種型別交互相依性。 : #include "a.h" <------- 抽象型別 1 : #include "b.h" <------- 抽象型別 2 : ... : #include "X.h" <------- 具象型別 1 : #include "Y.h" <------- 具象型別 2 : ... : 因為你應該讀過 OO design pattern, : 所以我想你知道我在說什麼。 : 而且抽象型別在 C++ 還可以用 template 寫出來, : 這時只要在 instantiation 的點看到 template argument 用的 type, : 以及 template 本身的 definition, : 無論其先後順序都可以 instantiate。 : 如果你連寫抽象型別都遇到要型別交互相依的問題, : 你或許就該考慮再抽出一層抽象層, : 或是直接 template 化, : template 化可以省下一個單位的繼承樹高度, : performance 上也會表現得比較良好。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.225.145.74