- Class source 加進來就可以用。
或是..
將interface 獨立宣告出來。各project 衍生出不同的實做。 client code 操作 interface介面。
- 問題:client code與interface衍生class 的實體發生關聯的方法是 ?
使用 pointer ? Robert作不喜歡 pointer
- 因為Robert implement 的 startup code,沒有作ctor section 的初始化,所以不能用 new 運算原。
所以.. 用一個parent class 的 pointer 指向 child class 的實體 object是允許的。
所以.. 所有global object 改用 interface class,在global header file 宣告 interface pointer。然後在 程式啟動時,將實際生成的class 指定給 global interface pointer,讓其他的client code使用。
分析目前code架構,決定修改方法:
在GlobalObjectInit( )中作initialize : 在 CEntry( ) 中 _cpp_initialize( )後就執行,可以確保在任和class operation 之前會作初始化。
就從修改 GlobalObject.h 開始,將global class variable 宣告為 pointer。
CUART *g_CUART;c_XX 是實體, g_XX 是interface。
CUART3 c_CUART;
真正的作法是:
static CUART3 c_UART;CUART 是 CUART3 的parent class。
CUART *g_CUART = (CUART*)&c_UART;
這應該才是Robert 當初設計的目的(?)
從 Mini 開始改起..
- 還不錯,改了一兩個project後,接下來的project 很好改。
證明這樣的架構不會引入新的關聯性。 - 從 Mini 架構 fork 新project 也很容易。
- 有些 header file 會區分 是否為 "Mini" project ,而 include 不同的 header,造成在 mini 中要使用完整版的class 出現問題。
- 上面的例子都是出現在 使用到 class中的static function。
2 則留言:
我確認 你在寫中文 and 一點點的code
但是 不懂的佔大多數
1. 物件觀念似乎建立的不太好
2. 對原作者的設計似乎也沒辦法完全了解
我想 我該好好進修了
結果robert說他當初並沒要要這樣作,他只是單純的想共用code (少寫一些code)。
所以自然的建出 abstraction class..
至於他沒這樣作 (abstration class pointer)的原因是...每個child class 的 class name 他都用一樣的 .,,,,,,,
雖然是這樣,但是 include file 的部份還是沒辦法flexible吧.
張貼留言