給程式設計師介紹一些C 開源庫

2021-06-20 06:14:07 字數 1995 閱讀 3125

儘管c++是一門強大且語法靈活的語言,實際上,許多程式設計師並不喜歡用c++開發gui,這是因為用c++來開發gui太過複雜。現存的一些c++ gui框架定義了一些規則,它需要你寫出一些死板的**才能執行,這總會導致一些問題,例如,讓你在深度的繼承層次中糾結,難以維護。現在,有另乙個選擇了,nana c++ library,乙個純粹的c++庫,讓你能完全發揮你的c++知識/技巧/手法來編寫gui,這是用c++開發gui的乙個重大的進步。類似標準庫和boost**風格,很「現代」,包含gui、執行緒以及檔案系統等函式和類。目前支援windows和linux x11平台,分為c++03和c++11兩個分支。

特性:

* make gui code easy to read/write/understand

* no need to #includesuch platform specified header

* flexible/easy to implement custom widget

* bidirectional languages supported

* thread-safe

* cross-platform

易學,易用

用nana建立乙個hello world程式有多易?

#include

#include

int main() 

非常簡單,易懂的**。nana引入簡單和合理的概念使其保持簡潔。其次,不像那些由於命名約束和語法約束導致編寫死板**的框架,nana能使你的**更加直觀和可讀。例如,響應乙個事件。

#include

#include

void clicked(const nana::gui::eventinfo&) 

int main() 

函式clicked()的名字並不是強約束的,你可以給它任意取乙個名字。這比通過繼承某個事件介面來實現響應的方法更加直觀。在某些情況下,我們並不需要關心clicked()函式的的引數,例如上面那個示例。

void clicked() //無引數. 

fm.make_event(clicked); //nana同樣允許! 

非常靈活,使你的**保持簡單明瞭。這個特性同樣適用於函式物件。

什麼使nana如此靈活?

nana c++ library 不包含任何「額外的編譯器」來解析「特殊的語法」, nana使用100%的c++和模板技術使其強大和靈活。nana並非像其他那些基於模板的程式庫, 導致大量的**膨脹,並且要求程式設計師具有模板技巧。nana對 c++的新手來說也是非常友好的。

nana是乙個完完全全的c++風格的程式庫,能執行在visual c++ 7.1/gcc 3.4及以上的編譯器。如果你是c++專家,nana也允許你使用c++11中最新的特性lambda來處理事件。例如

fm.make_event(); 

or fm.make_event((const eventinfo& ei)); 

另外,如果nana與c++11中的std::bind一起使用,就能獲得更大的靈活性。

多執行緒簡單地說,nana是執行緒安全的,在不同的執行緒中訪問widget物件也變成平常的事情。這是乙個重要的特性,可以讓程式設計師很方便的把事件處理提交由其他的執行緒處理。例如

#include

#include

void foo() 

int main() 

)); 

fm.show(); 

exec(); 

} raii

有乙個重要的特性,展現在上面那些示例中。當form物件被建立,與它對應的視窗也會被建立,而這個視窗會一直隱藏著,直到呼叫了show()方法。當form物件被銷毀,與它對應的視窗也隨之關閉,這也符合c++的物件生命週期的概念。

跨平台程式設計

nana c++ library 是被設計成用來進行跨平台程式設計的,雖然第乙個版本的發布只能執行在windows上,但是現在這個庫基本上移植到linux(x11)平台上了。

最重要的特性:免費

這是乙個開源的專案,對於非商業應用和商業應用來說都是免費的。

給程式設計師新手的一些建議

前段時間因為實習生計畫花了很多時間做了實習生招聘的工作,產生的一些想法,寫在這裡。這次招聘過程中,我發現我們在校的學生有下面的這些特點 2 ok的解決問題能力。當問到演算法題時,我發現他們的問題解決能力還ok。我一般問1到2個中低難度的演算法題和1個基本的物件導向設計的題,都不難。我相信只要在學校裡...

給程式設計師新手的一些建議

前段時間因為實習生計畫花了很多時間做了實習生招聘的工作,產生的一些想法,寫在這裡。這次招聘過程中,我發現我們在校的學生有下面的這些特點 2 ok的解決問題能力。當問到演算法題時,我發現他們的問題解決能力還ok。我一般問1到2個中低難度的演算法題和1個基本的物件導向設計的題,都不難。我相信只要在學校裡...

給程式設計師新手的一些建議

前段時間因為實習生計畫花了很多時間做了實習生招聘的工作,產生的一些想法,寫在這裡。這次招聘過程中,我發現我們在校的學生有下面的這些特點 2 ok的解決問題能力。當問到演算法題時,我發現他們的問題解決能力還ok。我一般問1到2個中低難度的演算法題和1個基本的物件導向設計的題,都不難。我相信只要在學校裡...