re: 2009-2010小結(四) 溪流 2011-01-26 20:09
@欲三更
嗯,,其實那根本不是什么框架,只不過被先寫了點東西。
re: 2009-2010小結(四) 溪流 2011-01-26 20:04
@空明流轉
謝謝支持~!
re: 2009-2010小結(四) 溪流 2011-01-26 20:04
@gbb21
不厚道的家伙~
re: 2009-2010小結(四) 溪流 2011-01-26 20:04
@萬連文
嗯,多謝萬老師教誨。
@guest
08沒試過,就不知道了。不過后來有一個改進(在下篇最后說的),就是 Function<R()> 的第一個構造函數的參數去掉 const &,改成 T fun,同時 FunctionTraits 也不要了。這樣可能08下也能過了。
@陳梓瀚(vczh)
這是額外一個工具,生成代碼后才能貼在 C++ 里的嗎?
@zhaoyg
shared_ptr<X> * 當然得自己先解一層
shared_ptr<X> 才和 X* 具有形式上的等價性么
@飛舞的煙灰缸
我覺得做或者不做都是一個方案,但是不同意折中。如果折中,框架沒法跟用戶解釋,為什么WM_LBUTTONUP做了額外的工作,WM_DESTROY就沒做呢?框架沒有理由認為哪些是常用的。
re: 2009-2010小結(二) 溪流 2011-01-19 01:26
@megax
復習過三天的^_^
re: 2009-2010小結(二) 溪流 2011-01-19 01:25
@C++愛好者
最近受到了一個挫折,于是校內和QQ暫時不想加不認識的人哈~
我比較喜歡版聊~
@OwnWaterloo
嗯,從實際角度上來說確實這樣~~
@OwnWaterloo
呵呵
這種寫法
template <typename S>
class C;
template <typename R>
class C<R (__stdcall)()>
{
};
發現通不過。。。
還有這個:
template <typename T>
class C;
template <typename U>
class C<SomeTraits<U>::Result>
{
};
偏特化的尖括號里不能進行摸板元運算?
@OwnWaterloo
呵呵,那玩意兒我本想改成一個博客客戶端,一直沒動。。。
可是,工作范圍以外,就更要玩感興趣的語言了呀~
我寫轉移文章的東西,不是為了轉移文章,是為了寫。
當然,碰到一些具有真實需求的并且有緊迫性的事情,那是要追求效率的。。。只不過這種狀況跟工作無異了
@OwnWaterloo
但是只要不要把返回值拆出來,就是可以的
template<typename F>
void call(F f ) { return f(); }
void __cdecl f() { printf("cdecl\n"); }
void __stdcall g() { printf("stdcall\n"); }
@OwnWaterloo
多學點自然是應該的,但我覺得不應該追求日常編程脫離C/C++啊。。。那是件多么可怕的事,關系到飯碗。當然不是歧視腳本語言什么的,但是從現狀看來,越來越多的人在用更加簡單的語言,業界最稀有的的還是C/C++的人啊。(vczh說的生存斗爭觀點我很贊同。)越簡單意味著入門越容易,競爭者多,于是想勝出就難了。所以我覺得往復雜方面靠的大方向還是要的。所以。。。用API不如造API,用輪子不如造輪子,不如用造輪子的輪子。。。臨了的時候,也許可以居高臨下的跟別人說:你,不就是會很多API么?這些API我都造過。你,不就是會用很多輪子嗎?這些輪子我都造過。你,不就是會用很多語言嗎?這些語言我也都造過。。。哈哈,扯淡了
@OwnWaterloo
bind的時候會遇到怎樣的情形我目前不知道。但是就 function 的階段來說,我剛剛自認為比較仔細地確認了代碼能夠跑的樣子:
void __cdecl f1(int)
{
}
void __stdcall f2(int)
{
}
int main()
{
Function<void (int)> g1(&f1);
Function<void (int)> g2(&f2);
g1(0);
g2(0);
return 0;
}
觀察匯編結果,f1的ret出來后有 add esp 4動作,f2的ret 4出來后沒有
@OwnWaterloo
歡迎聊天~~~
warning神馬的,感覺就是要見一次殺一次,不然絕對破窗效應。
“當需要這種靈活性時, 直接把C++丟了,選其他動態類型語言來編程?!庇幸蝗杭m結的人(當然不是我),他們的信仰就是用 C++ 做任何事,或者說他們的興趣就是用C++ 來做任何事,那怎么辦呢?呵呵。且不說個人興趣導向。從很理性的結果主義的角度考慮,這種時候確實得換,應該要換,但也不是每個這樣的場合都有條件換,比如團隊里沒有會python的且不想學python,但有一群蛋疼的Cpper,這種事情也會發生吧。
最后,你說你在教C?求教,求升華~!·^_^
@cexer
謝謝分享這么多想法。
給 handler 起名字確是刪除 handler 的好辦法,我可以不用糾結要不要用 typeid 啦。
另外關于你說的不同類型的handler的綁定,作為 Function,我覺得不該加入這樣的特性;作為GUI專用的Event,是可以接受有的特性的。
但是另一點疑問是,框架告訴用戶的規則——“返回 void 表示讓框架決定是否繼續處理,返回bool表示用戶想讓框架繼續處理或者拒絕用戶繼續處理”,與WTL的bHandled告訴用戶的——“設置bHandled用于指示框架是否繼續處理”相比,優勢大嗎?都存在一種約定。而用返回void與bool的形式,可能僅僅是更加炫一點?
實現上,不管用戶看到的參數是怎樣的,框架最初獲得的肯定是 WPARAM 和 LPARAM,這樣,就算不修改 Function,似乎也可以在控件中給出不同的處理函數形式,例如給出一組重載的 OnClick:
OnClick(Function<void (int, int)>)
OnClick(Function<bool (int, int)>)
又例如給ClickEvent實現重載的operator+=?
前兩天我在猶豫框架要不要幫用戶解析 WPARAM、LPARAM,你的例子讓我堅定了想法,解析之!。。讓使用者不需要查 MSDN。。?;蛟S做不到這種程度吧。
@OwnWaterloo
很多時候, C++ 程序員不是去考慮這種需求是否存在, 實現這種需求的復雜度如何, 維護代價如何。
僅僅是因為他們能, 所以他們就要這樣做……
其實有時候, 這些需求僅僅是美學上的, 而不是技術上的。
“僅僅是因為他們能, 所以他們就要這樣做……”有時候確實這樣,但一般實現代價一般很小的情況下才會出現這種沖動,想要順手做了。
@cexer
@OwnWaterloo
關于調用約定,貌似不用復制N份(VS2010下測試),函數會自動被識別為 R (__stdcall *)(...)
@zhaoyg
是的,T*自然沒問題,就是為了同時也支持傳入 T。
re: 2009-2010小結(二) 溪流 2011-01-18 12:26
@潘孫友
牛逼!崇拜!
re: 2009-2010小結(二) 溪流 2011-01-18 12:26
@zuhd
@right
不要瞎扯,哥很嚴肅的哦
re: 2009-2010小結(二) 溪流 2011-01-18 00:47
@expter
沒有艷遇??吹接腥祟A測數字序列的要太監,堅決不能太監。
@cexer
很有啟發性的提示,謝謝分享~!頂了再細讀。
@飛舞的煙灰缸
求不借助于typeid的function相等的判別方法~
re: 我的游戲編程之路(一) 溪流 2011-01-17 10:31
這個木馬后來被金山毒霸收錄,哈哈
re: 2009-2010小結(一) 溪流 2011-01-16 20:18
@right
呵呵,老師靠譜沒用,我不靠譜~
re: 代碼自動生成-宏遞歸思想 溪流 2011-01-13 00:03
有沒有辦法只出現一次 DEX_XX 這樣的系列宏,
之后不要出現 PARAM_1 PARAM_2 PARAM_3 呢?
re: ?編輯器制作之簡易代碼自動完成 溪流 2011-01-05 12:33
MegaxEdit +1
re: 我的編程元年 溪流 2010-12-23 20:32
@叫我老王吧
嗯,我也看出牛人喜歡說自己傻逼,所以冒充一下過過癮~
re: 生成隨機數的一段代碼 溪流 2010-12-23 20:28
來看看敢聲稱絕對隨機的人~
re: [譯文]VIM使用者大腦的形態 溪流 2010-12-22 23:46
表示學不會,除非把鍵盤上印著的標志給換一下我才能反應過來
re: 我的編程元年 溪流 2010-12-22 23:36
@叫我老王吧
我不是,我是傻逼。我沒你幸運,沒能得到空明前輩時常的指點;僅有的幾次交流之中,也讓我知道了我的傻逼之處,使我心懷感激。
re: 我的編程元年 溪流 2010-12-22 19:06
“但他們永遠不會知道更傻逼的是我每次敲網址前都會加“http://”
這個。。。每次我輸 http:// 的時候,總有一群sb在后面喊,這個可以不輸,仿佛只有不輸才是大俠。。
re: 我的編程元年 溪流 2010-12-22 19:05
“那是一個純真的年代,李剛每天下了班騎自行車接兒子,冠希還沒學會用相機,菊花還是用來欣賞的”。。。
洋洋灑灑,令人羨慕嫉妒恨吶
讀過的第一篇跨度十年的文章是林銳的《大學十年》,第二篇就是LZ的這篇《10年編程之路》
從寫第一行C代碼起,自己也算有快5年了吧,希望再過5年能有LZ一半水平~
re: 關于COM和.net的思考 溪流 2010-12-19 15:33
學習了
re: GUI框架:談談框架,寫寫代碼 溪流 2010-12-19 01:12
來考古了,太多了~~~~囫圇看一遍都花這么久。
@loadlibrary
LoadLibrary 怎么了?
@classyk
我是說,你有可能拿不到這個lib
@classyk
Delay Load 實際上還是“靜態”加載。我想要一個真實的動態加載,編譯的時候可以不需要那個 .lib 的。嗯……舉個例子,用DLL作為某個插件系統里的插件。
@123
不過,我很不喜歡“鉆牛角尖”論。有一說一,有二說二,說錯了大可以請你賜教。但是你說人家“鉆牛角尖”,本質上來說就是認為沒有談論的必要,拒絕別人發表觀點,拒絕他人參與討論,可是你又不把你的觀點說出來,這叫什么態度嘛?你說是嗎?
@123
就事論事,從你你的例子來說,好像也確實不無道理。就看耦合的程度了。
@Alemon
可能是編碼問題吧,我的DLL是Unicode的,你的工程應該是_MBCS的吧。這樣子試試:
BOOL bRet = ZWZipCompress(L"d:\\systemp.mdb", L"d:\\temp.zip");