C++20 的 template lambda

C++11 所推出的 Lambda expression 這種匿名函式,Heresy 一開始還覺得不知道哪裡可以用?但是後來真正寫多了,才發現他實際上是非常好用的一個功能。

而在 C++14 / C++17,也又針對 lambda 加入了一些新的功能、讓他更為強大。
不管是 captures with an initialiser 還是 generic lambda,都讓 lambda 的使用上更為方便。

到了 C++20,則是又加入了「template parameter for lambda」這項特性,算是又做了一些強化。

閱讀更多»

由 dll 檔建立 lib 檔(修改 lib/dll 名稱)

通常一個 Windows 下 C/C++ 的動態連結函式庫(Dynamic-link library、維基百科微軟的文件),會有三種東西:開發時使用的 header 檔、連結階段需要的 lib 檔、以及執行階段才需要的 dll 檔。

在這個架構下,實際上所有的程式都已經編譯好、儲存在 dll 檔案裡面了,實際上真的需要,也是可以在執行階段直接去讀取 dll、抓出裡面的函式來用的;但是在有 header 和 lib 的時候,開發上還是比較方便的。

而實際上,lib 檔主要的功能,就是告訴編譯器(其實是連結器)這個 dll 檔裡面有哪些函式可以用而已;在編譯的時候,系統只會去檢查 lib 的內容,而不會去管 dll 檔。

閱讀更多»

Qt Visual Studio Tools 的新版設定

很久之前,Heresy 曾經寫過一篇《不使用 qmake 建置 Qt Designer 產生的程式:手動建置》,記錄了當時還在 Qt4 時代的、Qt 的 moc 等前置流程的處理方式。

當時 Heresy 是決定自己寫一個 Visual Studio 的 Custom build rule 來解決 Visual Studio 下建置的流程,後來也算是完成了一個可以用的版本;所以其實相關的專案,後來也都是透過這個方法來建置了。

不過後來發現,這個自製的方案雖然算是可以正常運作,但是其實使用上還是有一些小問題;所以在切換到 Qt5 之後,Heresy 這邊的新專案都是改用 Qt 官方提供的 Qt Visual Studio Tools(連結官方文件)來建立 Qt 的專案。

而前一陣子,Heresy 一來是想把部分還在使用 Qt4 + 自行建置的 build rule 的專案一口氣升級到 Qt6,所以花了好些時間來測試、研究。這邊算是稍微記錄一下這次升級的時候,研究的一些相關的東西。

閱讀更多»

使用 Visual Studio 建置 Qt 6

由於 Heresy 這邊是用 Qt(官網)作為圖形介面程式開發的環境,所以在很久之前,Heresy 曾經記錄過自己建置 Qt 4.6.3 的經驗;不過後來,由於決定放棄自己建置、而是改用 Qt 官方提供的 Qt SDK,所以就沒研究怎麼自行建置了。

但是相對地,當引進 GitLab CI/CD 後,就變成得研究怎麼在 Windows Docker 裡面安裝 Qt SDK 了。

開始玩這部分後,才發現 Qt 在這部份真的很討厭…本來以為弄好第一次後,以後就沒什麼問題了,但是後來 Qt 一直修改他的安裝程式,導致常常過一段時間要重建 Docker image 的時候,安裝 Qt SDK 的腳本就廢掉、要修改(2020/02)…

閱讀更多»

64 位元 Visual Studio 2022 將於今夏推出預覽版

官方訊息是《Visual Studio 2022》。

基本上,雖然主流 Windows 已經進入 64 位元很久了,但是微軟自家的 Visual Stduio,卻一直維持在 32 位元(devenv.exe 這個主要的程序),在開啟超大型專案的時候,有的時候還是會有一些記憶體使用上的限制。

而微軟下一個 Visual Studio 的大版本、Visual Stduio 2022,將會是第一個 64 位元版本的 Visual Studio!

不過這個版本也還沒推出,要到夏天才會推出第一個預覽版本。

閱讀更多»