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