2017年10月3日 星期二

介面繼承 與 組合代替繼承

此文延伸自「虛擬函數多層強制實作」一文,若解說上有不明究理的地方可以先回頭看看。

在「虛擬函數多層強制實作」提到用 PROTOTYPE_BASE_CRTP 這個巨集來取代直接繼承的做法,可強制子孫類別都得強制實作某些虛擬函數,可是現在問題是如何強制必須使用這個巨集,所以只是把一個難題換成另一個難題而已。

所以還是得回歸 C++ 本身,C++ 只提供一層的強制實作,這應該有個光明正大的理由,文章最後有個看法也許可以成立。

PROTOTYPE_BASE_CRTP 巨集只是利用 C++ 的多重繼承在每個子孫類別再繼承一次純虛擬函數,以達到強制實作的目的,若這方式不可行,還有其它的方法嗎?

C++ 的純虛擬函數一次性實作,只要不實作就可以不斷的延續到子孫類別,所以只要採用「介面繼承」的方式就可以達到強制實作的目的。但類別資料繼承的部份要怎麼解決,不是程式設計界有句名言「組合代替繼承」,就用這兩招來試試。

2017年8月3日 星期四

虛擬函數多層強制實作

這裡留下 http://www.programmer-club.com.tw/ShowSameTitleN/c/46861.html 的討論結果。

C++ 的純虛擬函數只能強制實作一層,若希望多層的實作類別都必須實作,C++ 並沒有支援,以下示範如何建立多層強制實作的機制

2017年5月6日 星期六

碎形幾何測試程式




以上影片說的是碎形幾何,若覺得手癢也想試試,以下的程式可幫上一點忙。

程式使用到 CxxlMan2 程式庫,可到 http://blog.cxxl3d.tk/2015/10/cxxlman2-class-lib.html 下載,不過只用到 cxxlcommon\include 內的引入檔,所以不用編譯這個程式庫,只要把 THREADMGR.HPP 所在的完整路徑加到 include path 就可以了。

程式在 Win10 用 vs2015 和 MinGW 6.3 編譯跑過沒有問題,程式只是一個架構,把程式碼整個複製貼上就能用了。

2017年4月30日 星期日

替死鬼模式

cxxlObject 物件須所有持有者放棄才會結束,若有特殊的持有者不會主動放棄,而是要等其他所有持有者放棄之後才會跟者放棄。

這時就有難題了,要怎麼知道其他持有者都放棄了,這時替死鬼就派上用場了,特殊的持有者仍持有該物件,其他持有者則改持有替身,等所有持有者放棄替身後,再由替身去要求特殊的持有者放棄該物件。

2017年1月7日 星期六

[轉傳]修改 subversion log 訊息

http://askalee.blogspot.tw/2006/11/subversion-log.html

在 Windows 系統下用 TortoiseSVN,到 TortoiseSVN repository 的 hooks 目錄中,新增或編輯一個名為 pre-revprop-change.bat 的檔案,內容改為

  exit 0

即可



2016年9月12日 星期一

選用 OneDrive

在 放棄 Dropbox 文中有提到自動同步會失去備份的意義,有一個解決的辦法,就是把 Dropbox 資料夾的內容再備份一份,但這樣在電腦中就會多了一份,且會面臨可能會不一致的問題

而微軟出品的 OneDrive 有一個方便的功能,可以選擇哪些資料要同步

因而確定中選,但不願意同步的資料夾,在本機上不會留存會自動刪掉,不過仍存放在 OneDrive 請放心

本站上和 CxxlMan2 程式庫相關的檔案已由 Dropbox 轉到 OneDrive,可以下載了