你用c++做過哪些意思的事?

看到一個問題你用 C 語言做過哪些有意思的事? - 編程 覺得這個問題本身挺有意思的,各位大神小仙的回復也挺多乾貨的。所以,想問問大家用C++做過哪些有意思的事。

疑惑:有人會說,C與C++不是差不多嗎?有C的回答不就可以了嗎?

解釋:在我看來(雖然我是個C++初學者...),面向對象的C++還是與面向對象的C不一樣的,尤其現在C++11/14甚至C++17標準出現,C++應該還能做更多有意思的事,當然這裡的「更多」不是說C++比C強大(這裡沒有評論C與C++孰優孰劣...)。

除此之外,這比單純的問"XXX語言能用來做什麼?"來得更有意思一些吧...(因為可以套出更多乾貨來...........)

==================沒錯,我就是帥氣的分割線!=============================

其實,我自己也是一個C++初學者(入門看的就是@vczh強勢審校的C++ Primer,雖然至今還在找那個門.........),同學中大部分也都學JAVA很少有人會蹚C++的「渾水」,我相信「水至清則無魚」,這裡也非對比JAVA與C++的「錢途」,只是我覺得我所感興趣的C++其實是可以做更多有意思的事,而不是「千篇一律」的黑框框。所以請各位大大說說自己做過有意思的事,無論逼格怎樣,在我看來,所有有意思的東西,都是逼格高的。(@vczh輪大大第一個回答這個問題,我還是很激動的.........也因此覺得應該再修改修改問題的表述,使得它嚴謹些............ 不說了......學習去啦)


我在學習C++的過程中,對C++的細節的了解主要還是靠各種玩具程序。

  • 一個功能正確但是性能很低的垃圾收集指針gc_ptr:vczh_toys/Main.cpp at master · vczh/vczh_toys · GitHub

  • Linq:vczh_toys/Main.cpp at master · vczh/vczh_toys · GitHub

  • Y Combinator:vczh_toys/Main.cpp at master · vczh/vczh_toys · GitHub

  • Parser Combinator,唯一的優點就是比boost::spirit的編譯速度快了100倍,不過語法分析器終歸還是人肉遞歸下降才好,parsec就是有各種奇怪的坑:C++輕量級文法分析器更新,代碼+DEMO×3(下載)@劉鑫

  • 寫了一個削減了(主要是宏)和修改了(主要是換掉了噁心的指針聲明語法)的C語言腳本引擎,運行時編譯成x86機器碼寫進內存里直接調用。這個東西的parser就使用了上面的項目:JIT - λ-calculus(驚愕到手了歐耶,GetBlogPostIds.aspx)


寫過連連看外掛,可以調整點擊速度,中午休息時間邊跟妹子聊天,邊看外掛跟妹子玩

但是寫的時候為了測試,默認間隔是1ms,結果有次啟動忘記修改間隔,瞬間就點完了所有圖案

妹子再也沒跟我玩過遊戲

過了幾天和另一個妹子玩的時候,又犯了同樣的錯誤

所以沒有妹子和我玩遊戲了

這是個悲傷的故事

---------------------------------------------------

更新:

玩Dota2的時候,做Dota2的周邊工具,比方說Dota2的皮膚資源的解析提取工具:

GitHub - hufuman/VPKReader: parse valve"s vpk file, and selectively extract files in it.

公司外發的程序,出現過缺少C++運行時的問題。寫過檢測運行時是否符合要求的工具,並加到自動編譯的過程中,檢測不過算失敗

GitHub - hufuman/sxshacker: find the correct runtime/manifest/sxs for Windows software for software developer.

為方便調試和查詢Log,寫過自定義的日誌查看程序,包含方便的日誌篩選等功能

GitHub - hufuman/xlogview: Automatically exported from code.google.com/p/xlogview

查找哪個方法或者模塊,佔用了Exe、Dll的空間:

GitHub - hufuman/sym_size: utility to view size of all symbols in Exe/Dll/Lib


static void TestRpc()
{
auto rpc = std::make_shared&&>();

rpc-&>def("fuck", [=](const vector& girl){
});

vector& girl = {"v"};
rpc-&>call("fuck", girl);

rpc-&>def("echo", [=](const string value, dodo::RpcRequestInfo reqInfo){
rpc-&>reply(reqInfo.getRequestID(), value);
});

rpc-&>call("echo", "hello", [](const string value){
cout &<&< value &<&< endl; }); }

-- 剛才忘記貼鏈(guang)接(gao)了……可輕點 accumulation-dev/src/rpc at master · IronsDu/accumulation-dev · GitHub

C++11 實現的簡易 RPC.

使用 def 註冊(lambda和靜態函數)服務。如果需要返回值給調用者,最後一個參數為 RpcRequestInfo即可。

使用 call 調用服務.當需要接受返回值時,最後一個函數為lambda(或靜態函數)即可。

服務函數和(調用方的)非同步回調函數均支持任意個數的參數(類型支持int,string,vector,map,set,tuple,protobuf 以及他們之間的任意組合,譬如map&&>&>都行)

用來開發分散式遊戲服務後端的邏輯真的就像瑞士軍刀(誇張了^-^)。

當然缺點也是有的:無協議描述,容易出現兩端(調用約定)不匹配~~~~

--------------------------------------

ps,本來看到v大回答了,我不想強答獻醜,後來看到問題里的「尤其現在c++11與更高版本的標準出現,c++應該還能做更多有意思的事」, 於是覺得可以(找個借口)分(zhuang)享(bi))下,哈哈哈哈

--------------------------------------

感謝你,在我編寫這個庫時給我的幫助!向你學習!


當年寫過最有趣的應該是一些基於opengl的模擬程序吧

自己實現的引擎

輸入外部紅外圖像和伺服信息,根據伺服數據轉動camer,用opengl疊加繪製ui和各種目標,比如飛機導彈什麼的,算是一種增強現實

再將圖像buffer輸出送給目標識別板進行目標跟蹤功能測試

主要是用於設備訓練和功能驗證,我閑得蛋疼加了很多爆炸效果換彈功能還有射擊功能。。。乍一看就跟cs(想想看其實更像搶灘登陸。。。)似的。。。甚至還有計分板(自研項目嘛,可以隨意一點)。。。結果寫著正開心。。。領導從後面過來了。。。


發現win32 API 可以在窗口渲染中傳入自己的內存

於是寫了一個內存圖像處理的類,支持複製混合縮放旋轉,後用彙編優化

寫了一個界面資源管理器,樹結構保存界面中控制項的層級關係

用了一個三方庫讀取xml來實現界面動態載入

參考html和android,把一些常見的屬性實現掉了,比如padding,margin,weight...

於是乎折騰了大半年,終於搞了一個四不像的界面庫出來,namespace sx

讀作傻叉


確實研究代碼比較多,比如當初研究 Lock-free 演算法弄了個無鎖內存池 高性能無鎖(Lock-free) 內存池

以及研究回調弄的 "優雅"的C++觀察者模式實現


用模版寫了一個具有量綱計算能力的單位系統:

https://github.com/cnwzhjs/unit_system/blob/master/unit_system/unit_system/unit_system.cpp

metre height(1.7);
kilogram weight(70);
auto emi = weight / height / height;

cout &<&< "Height: " &<&< height &<&< endl; cout &<&< " which is: " &<&< convert&(height) &<&< endl; cout &<&< "Weight: " &<&< weight &<&< endl; cout &<&< " EMI: " &<&< emi &<&< endl; const div_unit& light_speed(3e8);
auto energy = weight * light_speed * light_speed;

cout &<&< "Energy: " &<&< energy &<&< endl; cout &<&< "Light Speed: " &<&< light_speed &<&< endl; cout &<&< "1 Light Year = " &<&< convert&(light_speed * second(3600 * 24 * 365)) &<&< endl; typedef rec_unit& herts;

const herts power_freq(50);

cout &<&< "The power frequency: " &<&< power_freq &<&< endl; cout &<&< "Every period, light goes: " &<&< convert&(light_speed / power_freq) &<&< endl; cout &<&< "It cost " &<&< height / light_speed &<&< " for light to run " &<&< height &<&< endl;


推薦閱讀:

OC 和 C++ 中聲明和實現文件分開的寫法有哪些利弊?
現在的編譯前端技術還是用NFA和遞歸下降實現lexer和parser嗎?
有什麼可以用raspberry pi做的或者實現的有趣的/有用東西?
C#有沒有什麼比較好的入門類書籍,能夠闡明c#的思想以及基本語法,適合初學者上手?
如何從C++過渡到C#?

TAG:編程語言 | 有意思 | CC |