2020年1月15日 星期三

打造在 Win10 的 C++ 編譯環境

此文有點像廢文,因每人須求不同,所以做法也不一樣,所以只能說給大家作為參考。

這裡用的編譯器是 MinGW 系列,可到這裡下載,至此文發佈時間為止,提供了如下最新的版本:
▲MinGW 各版本列表

2019年5月18日 星期六

LifeCustody 物件終結插件

CxxlMan2 程式庫的核心主要建構在垃圾回收(Gabage Collector)機制,藉由 cxxlObject 和 Smart_Ptr 的相互搭配,達到 cxxlObject 物件無 Smart_Ptr 持有時就會自動銷毀,但若有某些原因,要讓物件不想被繼續使用了,如何通知各 Smart_Ptr 放棄持有呢?這個插件就為了達成這樣的目的。

下載點:
LifeCustody_Src_20200430.zip

2018年10月26日 星期五

插件成了 header only 的罩門

什麼是 header only? 可以先看此文了解一下 http://zevoid.blogspot.com/2012/04/c11-extern-template.html

簡單的說,header only 是把一個 class 的程式碼就包含在這個 class 中,而這個 class 就放在引入檔(.h)中供大家使用。有別於引入檔只放 class 介面,程式碼則放在 .cpp 中。

header only 的好處是執行快,因一大部份的函數可以用 inline 的方式呼叫,另外也不用再加 .cpp 或是還要連結程式庫(lib 或 dll)。

但有一個不得不面對的問題,class 的程式碼因不放在特定的 .cpp 中,那麼使用它的模組(exe、lib、dll)都得編譯出各別的執行碼,一般來說除了程式會比較胖之外,也沒有其它不好的影響。但是遇到插件就出問題了。

插件是一個 dll 檔,特點是要用的時候才載入,不用的時候可以卸載,但若某一個 class 產生的物件,其執行碼在那個被卸載的 dll 中,就會出大問題了,以下範例程式就是在演示這種情況。

2018年10月25日 星期四

[轉貼分享]將巨集展開後連結

https://stackoverflow.com/questions/6669551/converting-string-macros-constants-to-wide-characters-unicode


#define WIDEN(quote) WIDEN2(quote)
#define WIDEN2(quote) L##quote

#define VERSIONSTR "Test V1.2.3"
#define VERSIONSTRW WIDEN(VERSIONSTR)

**補充說明**

搞懂了,原來 C++ 的巨集參數採用量子疊加技術,看這例子

#define WIDEN(quote) string xx##quote = quote
#define VERSIONSTR "Test V1.2.3"
#define VERSIONSTRW WIDEN(VERSIONSTR)

WIDEN(quote) 的 quote 是兩種狀態的疊加 -- VERSIONSTR + "Test V1.2.3"

若 quote 是單獨使用會塌縮成 "Test V1.2.3"
若 quote 和 ## 或 # 一起使用會塌縮成 VERSIONSTR

現在可以解釋原題了

#define WIDEN(quote) WIDEN2(quote) // 會展開成 WIDEN2("Test V1.2.3"),已無疊加
#define WIDEN2(quote) L##quote // 會展開成 L"Test V1.2.3"

#define VERSIONSTR "Test V1.2.3"
#define VERSIONSTRW WIDEN(VERSIONSTR) // VERSIONSTR 和 "Test V1.2.3" 的疊加





2018年8月5日 星期日

外積公式推導

會寫此文是因 http://elearning.stut.edu.tw/mechanical/Statics/newpage23.htm 這網頁已失效了,這網頁對外積公式有很清楚的推導,所以覺得很可惜。但完整的內容也不可能記住,所以只能依賴模糊的記憶和網上收集資料盡力幫他還原。

首先我先表達我個人(既然說是個人表示是猜測,因此歡迎指正)對外積的看法,我認為這東西應該是發明出來的,原因是這東西是用來描述力矩,力矩具有大小和正負,但看不出它具有方向,也就是說力矩好像是一個純量(大陸那邊好像叫標量),但純量是可以任意相加減,可是力矩又不能這樣做,就好像力矩具有不同的質。

但透過外積,這個質可以描述出來了,只要同質就可以相加減了,因此外積是一個很聰明的發明,但這個力矩的向量值只能當作質,不能當作施力的方向。但可以由三維空間中兩條向量算出第三條垂直向量這一點,在 3D 繪圖是很重要的功能。

2018年7月7日 星期六

快速排序法改良版

因遞廻會有爆掉堆疊的危險,所以若有可能盡可能用廻圈,但是不是可以用廻圈取決於關鍵變數,在一個廻圈後是不是須要保留其值,若不須要則可以重設其值,進行下一個廻圈的運行

以下用快速排序法做進一步的說明,先說它的改良法是青衫教的,我一直銘記在心

因快速排序法運行一個回合後會由定位點分割成左右兩部份,若要重設關鍵變數再處理左邊部份,右邊就失去關鍵變數沒法處理,反過來做亦相同,因此就讓較短的那邊用遞廻,長的那邊用廻圈