re: 對臨時變量的引用 eXile 2008-01-29 12:57
在這個例子中,s所引用的臨時變量的生命期和s的生命期是一致的。
re: [轉(zhuǎn)]Google Talk library – libjingle 測試筆記 eXile 2008-01-25 01:15
gips現(xiàn)在只有高級會員能下了啊,而且好象只能用三個月。。
re: 測試驅(qū)動開發(fā)(TDD)的頓悟 eXile 2008-01-23 22:35
FROM JAVAEYE:
注釋與文檔的本質(zhì),是為了便于軟件的開發(fā)和維護(hù),而不是在一道一道的工序之間作為“交接班”的說明
注釋與文檔的本質(zhì),是為了便于軟件的開發(fā)和維護(hù),而不是在一道一道的工序之間作為“交接班”的說明
re: 測試驅(qū)動開發(fā)(TDD)的頓悟 eXile 2008-01-23 22:02
FROM JAVAEYE:
很多大公司的代碼都沒有任何注釋,很多大師寫代碼也沒有注釋(看看junit就知道了,大家可能不知道這個東西是兩個大師在飛機(jī)上試驗(yàn)結(jié)對編程的副產(chǎn)品)。原因在于他們根本就不能容忍任何注釋造成的味道。
很多大公司的代碼都沒有任何注釋,很多大師寫代碼也沒有注釋(看看junit就知道了,大家可能不知道這個東西是兩個大師在飛機(jī)上試驗(yàn)結(jié)對編程的副產(chǎn)品)。原因在于他們根本就不能容忍任何注釋造成的味道。
re: 測試驅(qū)動開發(fā)(TDD)的頓悟 eXile 2008-01-23 22:02
FROM JAVAEYE:
實(shí)際上過多的注釋妨礙了重構(gòu)的進(jìn)行,如果你想讓代碼僵化那么就寫大量的注釋好了,越多越好,甚至注釋:代碼=10:1。重構(gòu)的結(jié)果往往是刪除掉大量的注釋,因?yàn)樗鼈兓蛘咭呀?jīng)不適合代碼當(dāng)前的結(jié)構(gòu),或者已經(jīng)不再需要,因?yàn)榇a的結(jié)構(gòu)已經(jīng)非常清晰了。而且我并不知道是否還有可能進(jìn)行下一次重構(gòu),那么我寫太多的注釋是不是很有可能是在做無用功?我其實(shí)只要寫很少量的注釋就足夠了。
實(shí)際上過多的注釋妨礙了重構(gòu)的進(jìn)行,如果你想讓代碼僵化那么就寫大量的注釋好了,越多越好,甚至注釋:代碼=10:1。重構(gòu)的結(jié)果往往是刪除掉大量的注釋,因?yàn)樗鼈兓蛘咭呀?jīng)不適合代碼當(dāng)前的結(jié)構(gòu),或者已經(jīng)不再需要,因?yàn)榇a的結(jié)構(gòu)已經(jīng)非常清晰了。而且我并不知道是否還有可能進(jìn)行下一次重構(gòu),那么我寫太多的注釋是不是很有可能是在做無用功?我其實(shí)只要寫很少量的注釋就足夠了。
re: 測試驅(qū)動開發(fā)(TDD)的頓悟 eXile 2008-01-23 22:01
FROM JAVAEYE:
就說注釋好了,比較一下:
1。可運(yùn)行的代碼
2。測試代碼的單元測試和其他測試
3。注釋
這個重要性應(yīng)該是向下遞減的。沒有1,其他都沒有意義了。沒有2,就沒有一種可執(zhí)行、可重復(fù)的方法來驗(yàn)證1的正確性。
至于注釋,對于程序的功能、正確性和可靠性,對于客戶來說是沒有任何意義的,所以除非有特殊的理由,我們才去寫注釋。
一般來說,堅(jiān)持寫注釋的人最重要的觀點(diǎn)是便于自己或后來者理解代碼,減小程序維護(hù)和變更的成本。這個我們當(dāng)然喜歡,但是要注意幾點(diǎn):
1。注釋到底是不是最好的工具來加快和精確理解
2。達(dá)到這樣的目的需要多少成本
第一點(diǎn),首先絕大多數(shù)注釋是細(xì)節(jié)程度上的,基本上和代碼本身處于同一層次,因此我們需要看一看代碼本身是否比注釋更有權(quán)利。
注釋的目的基本上是為了說明
1:代碼實(shí)現(xiàn)中的權(quán)衡
2。代碼本身的目的
3:別的代碼使用該代碼的方法
以Java舉例,注釋包括包注釋、類注釋和方法注釋。在99%的情況下,我認(rèn)為只有包注釋和類注釋才有意義,因?yàn)橐粋€包和
類只有自己的名字來解釋自己的含義,如果是一個簡單的類,譬如說是Rectangle,當(dāng)然這個名字已經(jīng)說明了一切。但很多時候,
一個類里面包含很多方法,很難簡單地用一個類名字來描述整個類的意圖和作用這個時候,這個時候代碼本身是不足的,需要類注釋的。
對于方法層次上的注釋,除非你這個方法用了非常復(fù)雜的算法,那么我們最先關(guān)注的是它的目的,這個目的用方法的名字就足夠了,
如果你認(rèn)為它有三個目的,或者有幾個階段,那你必須重構(gòu),直到達(dá)到這個目標(biāo)。這里代碼比注釋的好處是能夠優(yōu)化代碼本身的結(jié)構(gòu),
易于重用和新變化,沒有同步的成本,更重要的是它是可執(zhí)行的。
有的時候,例如內(nèi)部實(shí)現(xiàn)是錯誤的,我們需要修改代碼,這個時候我們也需要理解這個代碼地實(shí)現(xiàn)方式,但我認(rèn)為一旦達(dá)到了上面的要求,對一個程序員來講,代碼更精確、更簡單地能夠被理解,而不是注釋,除非注釋逐行解釋代碼地實(shí)現(xiàn)。
至于別的代碼如何來使用你自己的代碼,我不由得回憶起當(dāng)初學(xué)習(xí)delphi地經(jīng)歷,在我使用一段delphi以后,我很多時候都是憑自己對delphi函數(shù)命名的習(xí)慣的猜測去調(diào)用一個個函數(shù),而不是依靠delphi地API文檔和delphi源代碼里面的注釋(實(shí)際上非常少),真的無法理解就去看源代碼。而對于一些我完全是初學(xué)的類或者函數(shù),我的做法首先是去尋找范例代碼理解函數(shù)調(diào)用的順序,至于這種理解是否正確
最終取決于我自己的不斷測試。對于一些復(fù)雜的方法,我會在基本已經(jīng)理解,并且能夠使用的情況下再去看是否還有別的什么"訣竅",后門等等。因此,在這方面單元測試無疑比注釋更有用,但是如果一個方法確實(shí)比較復(fù)雜,并且不同地類和函數(shù)之間有一定的依賴關(guān)系,我們需要專門的API文檔,注釋根本做不到這一點(diǎn)。
第二點(diǎn),注釋的成本。注釋無法驗(yàn)證,注釋不能執(zhí)行。因此,注釋必須完全通過手工來進(jìn)行維護(hù),當(dāng)一個類被重構(gòu)為一個類層次,
當(dāng)一個方法被抽取成兩個方法,當(dāng)一個類的某些方法被移到另一個類,一個類地實(shí)現(xiàn)被改變(接口不變)的時候我們都必須手工去維護(hù)
這些東西,并且無法知道我們的注釋到底是不是正確揭示了這個類、方法的意圖和實(shí)現(xiàn)思路。這個成本是非常高的,特別是當(dāng)我們
知道注釋既不能為客戶提高更多的價值,也不會對其他程序員理解代碼有多大的幫助。當(dāng)然,如果我們有足夠的人力、物力愿意干這樣的活,有些時候也會稍微有點(diǎn)幫助。
就說注釋好了,比較一下:
1。可運(yùn)行的代碼
2。測試代碼的單元測試和其他測試
3。注釋
這個重要性應(yīng)該是向下遞減的。沒有1,其他都沒有意義了。沒有2,就沒有一種可執(zhí)行、可重復(fù)的方法來驗(yàn)證1的正確性。
至于注釋,對于程序的功能、正確性和可靠性,對于客戶來說是沒有任何意義的,所以除非有特殊的理由,我們才去寫注釋。
一般來說,堅(jiān)持寫注釋的人最重要的觀點(diǎn)是便于自己或后來者理解代碼,減小程序維護(hù)和變更的成本。這個我們當(dāng)然喜歡,但是要注意幾點(diǎn):
1。注釋到底是不是最好的工具來加快和精確理解
2。達(dá)到這樣的目的需要多少成本
第一點(diǎn),首先絕大多數(shù)注釋是細(xì)節(jié)程度上的,基本上和代碼本身處于同一層次,因此我們需要看一看代碼本身是否比注釋更有權(quán)利。
注釋的目的基本上是為了說明
1:代碼實(shí)現(xiàn)中的權(quán)衡
2。代碼本身的目的
3:別的代碼使用該代碼的方法
以Java舉例,注釋包括包注釋、類注釋和方法注釋。在99%的情況下,我認(rèn)為只有包注釋和類注釋才有意義,因?yàn)橐粋€包和
類只有自己的名字來解釋自己的含義,如果是一個簡單的類,譬如說是Rectangle,當(dāng)然這個名字已經(jīng)說明了一切。但很多時候,
一個類里面包含很多方法,很難簡單地用一個類名字來描述整個類的意圖和作用這個時候,這個時候代碼本身是不足的,需要類注釋的。
對于方法層次上的注釋,除非你這個方法用了非常復(fù)雜的算法,那么我們最先關(guān)注的是它的目的,這個目的用方法的名字就足夠了,
如果你認(rèn)為它有三個目的,或者有幾個階段,那你必須重構(gòu),直到達(dá)到這個目標(biāo)。這里代碼比注釋的好處是能夠優(yōu)化代碼本身的結(jié)構(gòu),
易于重用和新變化,沒有同步的成本,更重要的是它是可執(zhí)行的。
有的時候,例如內(nèi)部實(shí)現(xiàn)是錯誤的,我們需要修改代碼,這個時候我們也需要理解這個代碼地實(shí)現(xiàn)方式,但我認(rèn)為一旦達(dá)到了上面的要求,對一個程序員來講,代碼更精確、更簡單地能夠被理解,而不是注釋,除非注釋逐行解釋代碼地實(shí)現(xiàn)。
至于別的代碼如何來使用你自己的代碼,我不由得回憶起當(dāng)初學(xué)習(xí)delphi地經(jīng)歷,在我使用一段delphi以后,我很多時候都是憑自己對delphi函數(shù)命名的習(xí)慣的猜測去調(diào)用一個個函數(shù),而不是依靠delphi地API文檔和delphi源代碼里面的注釋(實(shí)際上非常少),真的無法理解就去看源代碼。而對于一些我完全是初學(xué)的類或者函數(shù),我的做法首先是去尋找范例代碼理解函數(shù)調(diào)用的順序,至于這種理解是否正確
最終取決于我自己的不斷測試。對于一些復(fù)雜的方法,我會在基本已經(jīng)理解,并且能夠使用的情況下再去看是否還有別的什么"訣竅",后門等等。因此,在這方面單元測試無疑比注釋更有用,但是如果一個方法確實(shí)比較復(fù)雜,并且不同地類和函數(shù)之間有一定的依賴關(guān)系,我們需要專門的API文檔,注釋根本做不到這一點(diǎn)。
第二點(diǎn),注釋的成本。注釋無法驗(yàn)證,注釋不能執(zhí)行。因此,注釋必須完全通過手工來進(jìn)行維護(hù),當(dāng)一個類被重構(gòu)為一個類層次,
當(dāng)一個方法被抽取成兩個方法,當(dāng)一個類的某些方法被移到另一個類,一個類地實(shí)現(xiàn)被改變(接口不變)的時候我們都必須手工去維護(hù)
這些東西,并且無法知道我們的注釋到底是不是正確揭示了這個類、方法的意圖和實(shí)現(xiàn)思路。這個成本是非常高的,特別是當(dāng)我們
知道注釋既不能為客戶提高更多的價值,也不會對其他程序員理解代碼有多大的幫助。當(dāng)然,如果我們有足夠的人力、物力愿意干這樣的活,有些時候也會稍微有點(diǎn)幫助。
re: 測試驅(qū)動開發(fā)(TDD)的頓悟 eXile 2008-01-23 21:58
JAVAEYE上真是有不少明言警句啊, 看來都是高手。。。
re: 測試驅(qū)動開發(fā)(TDD)的頓悟 eXile 2008-01-23 21:53
FROM JAVAEYE:
閱讀有些test case只能讓你云里霧里,而閱讀有些則讓你馬上就知道這段代碼的用途。其實(shí)找并不是這些test case寫的有水平差別,而往往是有針對問題角度的差別。而進(jìn)一步,你會發(fā)現(xiàn)閱讀這些test case如果按照一定順序,就會從最初的動機(jī)到最終的實(shí)現(xiàn)細(xì)節(jié)都有一個清晰的理解,而如果我們能夠在寫這些test case的時候就標(biāo)注出這個理解順序,將是十分核算的。而實(shí)際上很多時候我們書寫的順序就是最終我們適于閱讀理解的順序。
閱讀有些test case只能讓你云里霧里,而閱讀有些則讓你馬上就知道這段代碼的用途。其實(shí)找并不是這些test case寫的有水平差別,而往往是有針對問題角度的差別。而進(jìn)一步,你會發(fā)現(xiàn)閱讀這些test case如果按照一定順序,就會從最初的動機(jī)到最終的實(shí)現(xiàn)細(xì)節(jié)都有一個清晰的理解,而如果我們能夠在寫這些test case的時候就標(biāo)注出這個理解順序,將是十分核算的。而實(shí)際上很多時候我們書寫的順序就是最終我們適于閱讀理解的順序。
re: 測試驅(qū)動開發(fā)(TDD)的頓悟 eXile 2008-01-23 21:52
FROM JAVAEYE
就是因?yàn)椤拔臋n/注釋”在代碼的頻繁修改中太容易過時,而且也太容易為人所忘記,所以在我的實(shí)踐中不寫文檔,我的文檔就是我的“代碼+單元測試”,想知道我的想法,看“代碼+單元測試”就行了,沒有任何形式的文檔比“代碼+單元測試”更能體現(xiàn)我的設(shè)計(jì)
- 我們的文檔是十分簡短和松散的,一般放在wiki上,起到story guide的作用,但如上所說,隨著開發(fā)很快就過時了,從中你能找到設(shè)計(jì)的逐步迭代,但它和最終的產(chǎn)品是有差別的
- 對于我們開發(fā)工程師來講,“代碼+單元測試”就是我們的文檔,對于客戶來講,有專門的產(chǎn)品文檔供他們使用,但是那是由文檔工程師寫的
就是因?yàn)椤拔臋n/注釋”在代碼的頻繁修改中太容易過時,而且也太容易為人所忘記,所以在我的實(shí)踐中不寫文檔,我的文檔就是我的“代碼+單元測試”,想知道我的想法,看“代碼+單元測試”就行了,沒有任何形式的文檔比“代碼+單元測試”更能體現(xiàn)我的設(shè)計(jì)
- 我們的文檔是十分簡短和松散的,一般放在wiki上,起到story guide的作用,但如上所說,隨著開發(fā)很快就過時了,從中你能找到設(shè)計(jì)的逐步迭代,但它和最終的產(chǎn)品是有差別的
- 對于我們開發(fā)工程師來講,“代碼+單元測試”就是我們的文檔,對于客戶來講,有專門的產(chǎn)品文檔供他們使用,但是那是由文檔工程師寫的
re: 測試驅(qū)動開發(fā)(TDD)的頓悟 eXile 2008-01-23 21:50
FROM JAVAEYE:
對于大多數(shù)的中國的軟件開發(fā)團(tuán)隊(duì)來說,難以實(shí)現(xiàn)敏捷的最重要問題是人的素質(zhì)問題。一個敏捷團(tuán)隊(duì)要求每個成員都有較好的OOP和OOD的能力。.......實(shí)現(xiàn)敏捷是一個漸進(jìn)的過程。構(gòu)造一個在技術(shù)上有敏捷能力的團(tuán)隊(duì)有兩種方法,一是用足夠的錢去招聘有足夠能力的程序員(大部分企業(yè)沒有那么多錢)。二是將現(xiàn)有不符合敏捷技術(shù)要求的程序員培養(yǎng)為合格的敏捷工作者。而在培養(yǎng)的路上,單元測試正是一個很好的驅(qū)動方式和實(shí)踐平臺。
對于大多數(shù)的中國的軟件開發(fā)團(tuán)隊(duì)來說,難以實(shí)現(xiàn)敏捷的最重要問題是人的素質(zhì)問題。一個敏捷團(tuán)隊(duì)要求每個成員都有較好的OOP和OOD的能力。.......實(shí)現(xiàn)敏捷是一個漸進(jìn)的過程。構(gòu)造一個在技術(shù)上有敏捷能力的團(tuán)隊(duì)有兩種方法,一是用足夠的錢去招聘有足夠能力的程序員(大部分企業(yè)沒有那么多錢)。二是將現(xiàn)有不符合敏捷技術(shù)要求的程序員培養(yǎng)為合格的敏捷工作者。而在培養(yǎng)的路上,單元測試正是一個很好的驅(qū)動方式和實(shí)踐平臺。
re: 測試驅(qū)動開發(fā)(TDD)的頓悟 eXile 2008-01-23 21:49
@neoragex2002
這個老兄還是對TDD有一個起碼的了解以后,再來討論這個問題吧。
這個老兄還是對TDD有一個起碼的了解以后,再來討論這個問題吧。
re: 異步回調(diào)的一種封裝 eXile 2008-01-23 16:33
signal/slot機(jī)制正是在C++中解決這種問題比較好的辦法,可以看我的辦法:
http://www.shnenglu.com/eXile/archive/2008/01/09/40782.html
http://www.shnenglu.com/eXile/archive/2008/01/09/40782.html
re: Effective C++學(xué)習(xí)筆記:條款3:盡量用new和delete而不用malloc和free eXile 2008-01-23 00:51
只要是原創(chuàng)的,發(fā)在幾個blog也無所謂啊,獨(dú)家不獨(dú)家的有什么關(guān)系呢
re: 我的signal/slot實(shí)現(xiàn)(修訂版) eXile 2008-01-23 00:47
謝謝,改過來了。
re: 我和充斥臭味代碼的戰(zhàn)爭 eXile 2008-01-13 15:17
http://www.javaeye.com/topic/5876
關(guān)于文檔和注釋的討論
關(guān)于文檔和注釋的討論
re: 我和充斥臭味代碼的戰(zhàn)爭 eXile 2008-01-13 15:14
http://www.javaeye.com/topic/6294
關(guān)于文檔和注釋的討論
關(guān)于文檔和注釋的討論
re: 多線程中MutiRead/SingleWrite互斥的實(shí)現(xiàn)(原創(chuàng)) eXile 2008-01-09 16:28
而且你的這種實(shí)現(xiàn)存在死鎖的可能性, 即使不死鎖,也會使線程反復(fù)切換,效率不高
re: 多線程中MutiRead/SingleWrite互斥的實(shí)現(xiàn)(原創(chuàng)) eXile 2008-01-09 16:24
這種辦法很容易導(dǎo)致寫?zhàn)囸I...
一般來說寫的優(yōu)先級應(yīng)該比讀高一些
一般來說寫的優(yōu)先級應(yīng)該比讀高一些
re: 我的signal/slot實(shí)現(xiàn)(修訂版) eXile 2008-01-09 15:34
修正了一個bug ( signal.h: 92)
template<...>
class signal
{
//....
template <class T>
void connect(SP_NS::shared_ptr<T> const& f)
{
_connect(slot_type(f.get()), f);
}
};
template<...>
class signal
{
//....
template <class T>
void connect(SP_NS::shared_ptr<T> const& f)
{
_connect(slot_type(f.get()), f);
}
};
re: 如何在windows service里面控制console程序退出 eXile 2008-01-09 11:45
沒大明白,有代碼就好了。。。
re: 每天花30分鐘看OGRE--(1)MAGE和ShowMesh eXile 2008-01-09 10:21
@weiliang
Re : 對象屬性 編輯控件 ?
在qt solution中已實(shí)現(xiàn)了這種控件,安裝后即可使用
Re : 對象屬性 編輯控件 ?
在qt solution中已實(shí)現(xiàn)了這種控件,安裝后即可使用
re: vc2008中MFC重大變革-Visual C++ 2008 Feature Pack Beta 發(fā)布(附圖) eXile 2008-01-09 10:16
不錯,有點(diǎn)吸引力
re: 調(diào)整思路——2008年繼續(xù)努力 eXile 2008-01-02 14:01
另外, 保證你的模塊不出差錯, 不是靠文檔和注釋, 而是靠測試,
文檔和注釋,也分兩種, 一種是給自己看的, 一種是給別人看的, 這兩種寫法是不一樣的,
對于寫給自己看的文檔, 如果會影響開發(fā)進(jìn)度的話,為什么要寫它呢?這說明寫文檔的方法不對.
文檔和注釋,也分兩種, 一種是給自己看的, 一種是給別人看的, 這兩種寫法是不一樣的,
對于寫給自己看的文檔, 如果會影響開發(fā)進(jìn)度的話,為什么要寫它呢?這說明寫文檔的方法不對.
re: 調(diào)整思路——2008年繼續(xù)努力 eXile 2008-01-02 13:52
我覺得, 好象你理解的設(shè)計(jì)總在變化這句話有偏差, 設(shè)計(jì)變化的原因主要有兩點(diǎn):
1) 需求的變化, 主要是系統(tǒng)功能的改進(jìn), 擴(kuò)充, 版本的升級
2) 需求的細(xì)化, 主要是需求本身不會考慮到所有的實(shí)現(xiàn)細(xì)節(jié), 在實(shí)現(xiàn)時才發(fā)現(xiàn)有設(shè)計(jì)不當(dāng)?shù)牡胤?
1) 需求的變化, 主要是系統(tǒng)功能的改進(jìn), 擴(kuò)充, 版本的升級
2) 需求的細(xì)化, 主要是需求本身不會考慮到所有的實(shí)現(xiàn)細(xì)節(jié), 在實(shí)現(xiàn)時才發(fā)現(xiàn)有設(shè)計(jì)不當(dāng)?shù)牡胤?
re: 調(diào)整思路——2008年繼續(xù)努力 eXile 2008-01-02 11:45
這個問題, 稱之為重構(gòu).
在沒有單元測試的保證下, 進(jìn)行重構(gòu)是一種危險的行為. 正如你說的一樣, 要指望不出問題, 那是奇跡. 這也不能怪軟件工程沒學(xué)好, 因?yàn)槲覀儗W(xué)的軟件工程本身就是有缺陷的.
"把需求看好、文檔寫好、時間安排好,這才是硬道理…… "
這是不對的, 設(shè)計(jì)的唯一不變的特點(diǎn)就是: 它總是在變化.
--是不是有點(diǎn)有饒口 :) , 這是<<設(shè)計(jì)模式Head First>>中的一句話.
所以我們做的, 是如何應(yīng)對變化.
推薦看一下: <<重構(gòu),改善既有代碼的設(shè)計(jì)>>
在沒有單元測試的保證下, 進(jìn)行重構(gòu)是一種危險的行為. 正如你說的一樣, 要指望不出問題, 那是奇跡. 這也不能怪軟件工程沒學(xué)好, 因?yàn)槲覀儗W(xué)的軟件工程本身就是有缺陷的.
"把需求看好、文檔寫好、時間安排好,這才是硬道理…… "
這是不對的, 設(shè)計(jì)的唯一不變的特點(diǎn)就是: 它總是在變化.
--是不是有點(diǎn)有饒口 :) , 這是<<設(shè)計(jì)模式Head First>>中的一句話.
所以我們做的, 是如何應(yīng)對變化.
推薦看一下: <<重構(gòu),改善既有代碼的設(shè)計(jì)>>
re: 讓我痛苦得涕淚橫流的Qt[未登錄] eXile 2007-12-23 00:39
其實(shí)qmake很方便的,有了qmake,我都很少使用IDE了。
re: 奇怪于signal中的slot類的用途[未登錄] eXile 2007-12-21 02:23
個人認(rèn)為boost現(xiàn)有的signal 實(shí)現(xiàn)并不怎么樣, 應(yīng)該在下一個版本中有較大的更新。
再來解釋一下,使用trackable是為了把它作為一個基類,trackable對象銷毀時,能自動斷開相關(guān)連接。而connection的設(shè)計(jì)是因?yàn)閎oost::function并不能也無法提供一致的相等性比較,所以用connection來管理slot 的連接。當(dāng)然設(shè)計(jì)的關(guān)鍵之處是還是要防止懸掛指針的出現(xiàn),所以slot管理器并不直接操作slot的實(shí)例。
再來解釋一下,使用trackable是為了把它作為一個基類,trackable對象銷毀時,能自動斷開相關(guān)連接。而connection的設(shè)計(jì)是因?yàn)閎oost::function并不能也無法提供一致的相等性比較,所以用connection來管理slot 的連接。當(dāng)然設(shè)計(jì)的關(guān)鍵之處是還是要防止懸掛指針的出現(xiàn),所以slot管理器并不直接操作slot的實(shí)例。
re: 拋棄MS Access吧,請使用SQLite[未登錄] eXile 2007-12-14 11:39
SQLite現(xiàn)在的版本可以加密了嗎?我好象在它的文檔里沒有找到相關(guān)說明啊?
re: ACE中網(wǎng)絡(luò)通訊編程基本架構(gòu)[未登錄] eXile 2007-12-11 21:32
這篇文章說的還是socket編程的模型。
使用ACE,主要用的還是Reactor或Proacoter框架,到那時,還認(rèn)為ACE不難的,那都是高手。。。
使用ACE,主要用的還是Reactor或Proacoter框架,到那時,還認(rèn)為ACE不難的,那都是高手。。。
re: python做界面?[未登錄] eXile 2007-12-11 14:12
有一定道理。不過如果D再成熟一些的話,選擇D+wxD 也不錯。
re: 常見設(shè)計(jì)模式的解析和實(shí)現(xiàn)(C++)文檔及源碼打包下載[未登錄] eXile 2007-12-10 14:38
在c++中,應(yīng)用設(shè)計(jì)模式卻不使用智能指針,內(nèi)存管理遲早會變成一件極其痛苦的事情, 孟巖(?)甚至說在C++中不使用shared_ptr,就不要談面向?qū)ο笤O(shè)計(jì)。。。
re: New MFC將加入BCGControlBar[未登錄] eXile 2007-11-14 13:55
@力為
呵呵,如果MFC也跨平臺,唯一的可能就是Windows已經(jīng)失去了大部分江山。。
呵呵,如果MFC也跨平臺,唯一的可能就是Windows已經(jīng)失去了大部分江山。。
re: New MFC將加入BCGControlBar[未登錄] eXile 2007-11-14 13:46
遺憾啊,對eXtreme 比較熟....
re: C++接口與實(shí)現(xiàn)分離的2種方法[未登錄] eXile 2007-11-12 18:15
@fr3@K
這就要看CTest 是值語義還是指針語義了,對于指針語義,我覺得最好采用第二種接口類辦法,這樣概念上不會混淆,也便于將來派生新的功能。
這就要看CTest 是值語義還是指針語義了,對于指針語義,我覺得最好采用第二種接口類辦法,這樣概念上不會混淆,也便于將來派生新的功能。
re: 設(shè)計(jì)模式小結(jié)(一)[未登錄] eXile 2007-11-05 15:03
1)Adapter: 使風(fēng)格統(tǒng)一, 不受外來庫API的污染,
使 2)Bridge:用beta版的lib開發(fā)軟件,或者是開發(fā)所依賴的庫有較大的可能 在軟件的生命期內(nèi)發(fā)生改變時,通常使用該模式
這些確實(shí)需要有時間和實(shí)踐來理解,才能有深刻的體會。。。
使 2)Bridge:用beta版的lib開發(fā)軟件,或者是開發(fā)所依賴的庫有較大的可能 在軟件的生命期內(nèi)發(fā)生改變時,通常使用該模式
這些確實(shí)需要有時間和實(shí)踐來理解,才能有深刻的體會。。。
re: 還是關(guān)QSettings的,把我的問題重復(fù)一下[未登錄] exile 2007-10-27 18:18
QSettings有它自己的序列化機(jī)制,要控制它的編碼方式,最好還是用自己的INI配置類吧。
re: 漢語編程++ eXile 2007-10-18 17:44
信息產(chǎn)業(yè)部教育中心總工程師沈林興把五筆字型輸入法、漢字激光照排系統(tǒng)和漢語編程作為漢字在計(jì)算機(jī)應(yīng)用中的三大里程碑,“而漢語編程更具革命性意義。”他欣喜地看到
這一顛覆已經(jīng)悄然開始。
近日,用漢語編程實(shí)現(xiàn)的數(shù)據(jù)庫開發(fā)環(huán)境將通過江蘇省科技廳的驗(yàn)收。按照進(jìn)程,漢語程序設(shè)計(jì)語言數(shù)據(jù)庫開發(fā)環(huán)境項(xiàng)目完成后一年,項(xiàng)目承擔(dān)方——南京漢語編程有限公司將以漢語編程數(shù)據(jù)庫教育版為推廣重點(diǎn)并進(jìn)行其他工程開發(fā)。項(xiàng)目完成后兩年,漢語編程數(shù)據(jù)庫標(biāo)準(zhǔn)版將以O(shè)EM方式與國內(nèi)PC制造商捆綁銷售。項(xiàng)目完成后三年,將推出漢語編程數(shù)據(jù)庫企業(yè)版參與政府、企業(yè)、部隊(duì)信息化建設(shè),部分替代進(jìn)口產(chǎn)品。
江蘇省科技廳將對該項(xiàng)目投資三百萬元。
同樣看好漢語編程的還有重慶市科委,他們的預(yù)期投資是上千萬。漢語編程作為重大科技發(fā)明發(fā)現(xiàn)正在申請重慶市的國家級項(xiàng)目。
重慶藥監(jiān)局正在應(yīng)用漢語編程開發(fā)的數(shù)據(jù)庫實(shí)現(xiàn)對所有下屬藥店的監(jiān)管。目前這個項(xiàng)目完成了大部分,6月底將最后完工。
這一顛覆已經(jīng)悄然開始。
近日,用漢語編程實(shí)現(xiàn)的數(shù)據(jù)庫開發(fā)環(huán)境將通過江蘇省科技廳的驗(yàn)收。按照進(jìn)程,漢語程序設(shè)計(jì)語言數(shù)據(jù)庫開發(fā)環(huán)境項(xiàng)目完成后一年,項(xiàng)目承擔(dān)方——南京漢語編程有限公司將以漢語編程數(shù)據(jù)庫教育版為推廣重點(diǎn)并進(jìn)行其他工程開發(fā)。項(xiàng)目完成后兩年,漢語編程數(shù)據(jù)庫標(biāo)準(zhǔn)版將以O(shè)EM方式與國內(nèi)PC制造商捆綁銷售。項(xiàng)目完成后三年,將推出漢語編程數(shù)據(jù)庫企業(yè)版參與政府、企業(yè)、部隊(duì)信息化建設(shè),部分替代進(jìn)口產(chǎn)品。
江蘇省科技廳將對該項(xiàng)目投資三百萬元。
同樣看好漢語編程的還有重慶市科委,他們的預(yù)期投資是上千萬。漢語編程作為重大科技發(fā)明發(fā)現(xiàn)正在申請重慶市的國家級項(xiàng)目。
重慶藥監(jiān)局正在應(yīng)用漢語編程開發(fā)的數(shù)據(jù)庫實(shí)現(xiàn)對所有下屬藥店的監(jiān)管。目前這個項(xiàng)目完成了大部分,6月底將最后完工。
re: 漢語編程++ eXile 2007-10-18 16:47
不許笑,這個可曾經(jīng)是某政府投資幾千萬搞的項(xiàng)目, 據(jù)說是要搞中國人自己的編程語言。。。
re: 懸掛指針與boost::weak_ptr[未登錄] exile 2007-10-11 13:47
weak_ptr的主要目的是為了解決引用計(jì)數(shù)的循環(huán)引用問題
boost 出于線程安全的考慮,并沒有為weak_ptr提供->重載或get方法,所以不能直接使用, 還得轉(zhuǎn)化成shared_ptr
boost 出于線程安全的考慮,并沒有為weak_ptr提供->重載或get方法,所以不能直接使用, 還得轉(zhuǎn)化成shared_ptr
re: 觀察者 (Subject/Observer) 模式實(shí)現(xiàn)[未登錄] eXile 2007-09-26 14:33
@xiehp@sohu.com
這就是 it++ 和 ++it 的區(qū)別
這就是 it++ 和 ++it 的區(qū)別
re: ACE與ASIO之間關(guān)于Socket編程的比較[未登錄] eXile 2007-09-25 10:56
@missdeer
那就應(yīng)該分析一下測試的環(huán)境. 看一下有連接時,無連接時, 局域網(wǎng)中, 公網(wǎng)中.
asio本身帶的例子是很簡單的, 都是用法演示,最多也就服務(wù)器設(shè)定幾個線程.
在局域網(wǎng)中進(jìn)行這樣的測試是沒有什么意義的.
boost 的 thread 和asio都是有可能作為系統(tǒng)支持庫進(jìn)入std::tr2的.
那就應(yīng)該分析一下測試的環(huán)境. 看一下有連接時,無連接時, 局域網(wǎng)中, 公網(wǎng)中.
asio本身帶的例子是很簡單的, 都是用法演示,最多也就服務(wù)器設(shè)定幾個線程.
在局域網(wǎng)中進(jìn)行這樣的測試是沒有什么意義的.
boost 的 thread 和asio都是有可能作為系統(tǒng)支持庫進(jìn)入std::tr2的.
re: 我的QT筆記打包下載[未登錄] eXile 2007-09-24 18:25
好人越來越多了.....
re: Win32 Service的簡單封裝[未登錄] eXile 2007-09-24 18:20
剛準(zhǔn)備自己寫一個呢, 真是超爽啊, 太謝謝了....
re: Win32 Service的簡單封裝[未登錄] exile 2007-09-24 17:43
不錯不錯
re: ACE與ASIO之間關(guān)于Socket編程的比較[未登錄] exile 2007-09-24 16:16
asio本身并不占用多少資源, 如果網(wǎng)絡(luò)連接數(shù)不多,但占用CPU很厲害, 那肯定時是自己寫的程序某個地方出了問題.
re: 觀察者 (Subject/Observer) 模式實(shí)現(xiàn) eXile 2007-09-17 23:48
至于Observer::update(void*)可以利用ObserverAdapter實(shí)現(xiàn)接口強(qiáng)制,再利用 std::tr1::tuple 之類的來彌補(bǔ)類型信息的不足
re: 觀察者 (Subject/Observer) 模式實(shí)現(xiàn) eXile 2007-09-17 23:40
發(fā)現(xiàn)這種設(shè)計(jì)還有兩個優(yōu)點(diǎn):
(1)observer雖然用于解藕很不錯,但是在C++中,最大的問題是容易出現(xiàn)懸掛指針,而且出現(xiàn)后不易調(diào)試。這個實(shí)現(xiàn)在這一方面做得很不錯,可以最大限度的防止這類問題的出現(xiàn)。
(2)由于定義了抽象接口,很容易擴(kuò)充為線程安全的實(shí)現(xiàn)
(1)observer雖然用于解藕很不錯,但是在C++中,最大的問題是容易出現(xiàn)懸掛指針,而且出現(xiàn)后不易調(diào)試。這個實(shí)現(xiàn)在這一方面做得很不錯,可以最大限度的防止這類問題的出現(xiàn)。
(2)由于定義了抽象接口,很容易擴(kuò)充為線程安全的實(shí)現(xiàn)
re: 談?wù)劜灰粯拥膕ingleton eXile 2007-09-15 11:58
不錯, 和我的做法一樣.
re: D語言與C++[未登錄] exile 2007-09-14 18:12
看來D的編譯速度已經(jīng)超出了某些人的想象極限.......
re: D語言與C++[未登錄] exile 2007-09-14 18:10
(1)http://qiezi.javaeye.com/blog/26685
D語言編譯速度非常快(這也是Walter Bright對C++不滿的一個重要原因)。dsource.org中的mango項(xiàng)目包含755個D源文件,但在我的機(jī)器上編譯成.lib文件只需要4秒時間。
(2)
D is not a scripting language, nor an interpreted language. It doesn't come with a VM
D語言編譯速度非常快(這也是Walter Bright對C++不滿的一個重要原因)。dsource.org中的mango項(xiàng)目包含755個D源文件,但在我的機(jī)器上編譯成.lib文件只需要4秒時間。
(2)
D is not a scripting language, nor an interpreted language. It doesn't come with a VM