青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

loop_in_codes

低調做技術__歡迎移步我的獨立博客 codemaro.com 微博 kevinlynx

共6頁: 1 2 3 4 5 6 
re: 碩士論文致謝 Kevin Lynx 2010-04-29 16:37
好吧。原來你也認識潘李亮。。。
非學生強力圍觀一個。。。
不明真相地路過。。。
- -#
博客后臺管理:文件->上傳即可
re: [總結]中間/目標代碼生成 Kevin Lynx 2010-04-10 17:04
@陳梓瀚(vczh)
我當時想試試直接生成代碼的感覺,因為看到lua就是這樣做的。:D。所以就折騰了下自己。
PS,美帝不錯吧。
@溪流
這個問題某種角度來看,就如同對成員變量不管應用情景如何都提供Get/Set一樣,同public一樣了。

我覺得唯一的區別,還是一種安全控制吧:
class Singleton
{
public:
static Singleton &GetInstance() { static Singleton ob; .... }
private:
Singleton() { ... }
Singleton( const Singleton & ) ...
};
那么,這個Singleton對象就只存在一份。

當然,也有單件不作constructor的private限制的。
@aydge
lua里的線程并非OS里的線程。大家都知道的WOW里的LUA,用于其客戶端的UI擴展制作。本文提到的應用主要集中于服務器端的邏輯擴展,如任務、劇情等。
沒想到這種東西有這么現成的。我們還是自己寫的崩潰捕獲。可以根據pdb文件dump出崩潰時刻的調用堆棧之類的。收藏了。
對這種支持多種字符串資源的問題,沒必要自己寫個程序去生成對應的代碼文件吧?
english_res.txt:
IDS_TYPE_ERROR "XXXXX%s"

const char *s = LoadString( IDS_TYPE_ERROR );
sprintf( buf, s, err );

@feizai
是啊。
re: 需要判斷指針為空嗎[未登錄] kevin lynx 2010-02-11 10:49
這個問題在我們組里也備受爭議。有人覺得對每個指針進行拿捏然后再決定判斷,很多余,所以索性對所有指針進行空判斷;有人覺得沒必要寫那么多冗余代碼,需要對每個指針進行上下文審查。

拿一個接口為例,接口實現里是否有必要對參數進行判斷?接口調用者是否需要對返回值做判斷?反正這種事情挺糾結的.
@金慶
@李現民
3q for your comments.
今天隨便看了個文檔http://linux.chinaunix.net/bbs/thread-910296-1-1.html,<Linker Algorithm.pdf>恰好在里面看到和我這里提到的相同的2點結論
re: WOF(名將三國)的TGL文件格式 Kevin Lynx 2010-01-26 08:53
@飯中淹
- -
詭異。。我還以為你發漏了。我還用OD反匯編查找了下字符串。
re: WOF(名將三國)的TGL文件格式 Kevin Lynx 2010-01-25 14:28
占位置。學下破解思路。
PS,你那個工具怎么用?貌似需要將TGL文件放在同目錄且改名為stand_1.tgl ?
@OwnWaterloo
一樣的。
@OwnWaterloo
這個機會是什么意思?

@OwnWaterloo
@LOGOS
加extern是什么意思?文章中的例子,只是因為鏈接器沒有為靜態庫中的全局對象生成初始化代碼。我也并不關心每一個local的初始化順序,因為他們是全局的,所以他們肯定會先于main被初始化。整個文章的意思,其實是說,鏈接器并沒有生成這個自動初始化的代碼,因為鏈接器覺得這幾個“沒有”被使用的全局對象不需要,所以就沒生成。

圍觀悲劇的樓主。。。語言設置問題。可能是你設置被reset了
re: 2005-2009年個人總結 Kevin Lynx 2009-12-24 09:11
怎么像臨終感言。。。
re: 很傻很天真之Array Kevin Lynx 2009-10-12 09:19
- -|
重載逗號運算符,不會改變函數中逗號的語義。 - -!
是用于改變逗號表達式中逗號的語義,如:
ArrayDimension a;
a, 1; //逗號表達式
標準的逗號表達式其實還應該有個返回值。如:
class Test
{
public:
Test( int i ) : index( i )
{
}

const Test &operator, ( const Test &other )
{
return *this;
}

private:
int index;
};

Test a( 1 ), b( 2 ), c( 3 );
c = a, b;

不懂C#里的動態多維數組,所以對你這里的需求不作評論。:)
如果要支持不定個數的參數,要么使用C里的...(如printf),要么重載很多版本,即使模板也無法解決這個問題。如果太懶不想寫那么多重載版本,可以考慮用宏自動生成這些代碼。
re: HGE核心函數注釋 Kevin Lynx 2009-09-20 15:23
應該去分析下graphics.cpp下的圖形渲染部分。
大致瀏覽了你BLOG的所有文章,鼓勵下你。加油。
re: 使用std::vector 的陷阱[未登錄] Kevin Lynx 2009-09-03 13:37
其實我覺得這不是vector給你設的“陷阱”,STL容器只有責任維護你給他的東西,但沒理由維護這個東西里面的東西。不僅僅是vector,STL所有的容器如果按你這種思維去用,都會出問題:
class Test
{
int *a;
~Test()
{
delete a;
}
};
std::vector<Test> 維護Test::a其實應該是你的責任。
剛開始肯定會不習慣。很多開源項目會依賴第三方庫,但是下載下來的包里一般都不帶第三方庫。得自己去找,還得保證版本一致。習慣就好了,總比讓你重頭自己寫個UI庫好吧。:)
@OwnWaterloo
其實工作量這事,本來也就沒有被減少。就工作量(代碼量)這個角度來比較兩者的話。OnE1 OnE2和OnEvent(以后討論就說前者后者)比較而言,在增加新的事件通知時,前者需要增加通信層接口聲明(也就是那個被UI繼承的基類);后者需要從Param逐個取數據,前者是直接在參數里,如果前者也使用Param或者tuple來組織參數,也免不了解參數。

我覺得后者較前者讓人爽的好處就是:永遠不需要改這個中間通信層。

說下我現在是怎么派發通知的,這個其實也被放在這個通信中間層:
class OpNotify
{
typedef void (*HandleNotifyFnT)( any *data );
public:
AddNotifyHandler( long event_id, HandleNotifyFnT fn );
void Notify( long event_id, any data );
private:
std::map<long, HandleNotifyFnT> handleFuncTable;
};
UI層需要注冊處理事件通知的函數到handleFuncTable里。邏輯層每次派發事件通知時,調用OpNotify::Notify,這個函數簡單地從handleFuncTable里找對應的處理函數。
這個樣子之后,避開了switch...case。誰都知道,隨著事件類型的增加,switch...case也將急速膨脹。進一步地,通信中間層永遠不需要修改了。

現在邏輯層派發事件通知時:
OP_NOTIFY( NT_ENTER_RGN, any( create_param( player, rgn_id ) ) );
// OP_NOTIFY被定義為OpNotify::Notify

UI層只需要定義NT_ENTER_RGN的處理函數,并注冊到OpNotify,該處理函數大致為:
void HandleEnterRgn( any *data )
{
typedef Param2<Player, long> ParamType;
ParamType *p = any_cast<ParamType>( data );
Player *player = p->p1;
long rgn_id = p->p2;
}

@OwnWaterloo
是啊。嚴格來說,不算降低耦合。因為UI和邏輯層確實得協商設置哪些通知事件。不過,反正這個邏輯模塊本身就是要通知UI事件觸發的。這樣做之后,邏輯模塊不需要管UI是否處理,只需要通知。在任何地方想怎樣通知就通知。整個程序換了UI后,邏輯層也不需要改,只改UI的通知處理即可。
另一方面,如果使用
void OnE1(tuple<e11,...> );
void OnE2(tuple<e21,...> );
void OnE3(tuple<e31,...> );
這種方式,就會涉及到添加很多通知接口。這個負責通信的中間層就會越來越龐大。雖然,OnEvent(int e, any );這個方式會導致添加越來越多的事件類型定義,但總比添加一個OnEn好吧?:)
很少做這種UI比較復雜的應用程序,不知道其他人有沒有好的模塊架構方法。實在不想把UI和邏輯揉得那么緊。看過一些人直接在MFC的OnXXX里寫一堆邏輯代碼就覺得受不了。 我現在做的東西里就包含MFC和控制臺兩套UI,甚至在GUI方面差點換到bcb。
@OwnWaterloo
對,就是你說的這個意思。我也記得有個tuple這個東西。但是我一般不用boost,太大,太多。可以用來學習。:)
re: 指針和模塊健壯 Kevin Lynx 2009-08-18 11:54
@lin
當時那個BUG是因為C++代碼中對某個指針沒判斷,而由于某些臨界條件就會導致這個指針為NULL。恰好可以通過在策劃的腳本里做些修改而避免程序里那段代碼的執行。這個跟具體的應用環境有關系,別誤會。
re: 強大的bcb Kevin Lynx 2009-08-15 14:02
@OwnWaterloo
3Q
@艸
你就解釋下我遇到的那些“BUG”是怎么回事就行了,就事論事。或者你可以告訴我,new std::ofstream在你的BCB上沒問題。你的程序編譯時不會出現F1004 Internal compiler error。
re: 用腳本實現副本 Kevin Lynx 2009-07-16 22:10
應該不是“用腳本實現副本”,我覺得應該是提供腳本接口給策劃來創建副本。副本在很大程度上還是按照一般場景被服務器管理。
@deadlm
- -|
@deadlm
沒用過pascal,不同語言帶來的感受肯定不同。:)

functor之類的東西,為了支持各種不同類型的函數,其內部實現確實很惡心,而且少不了復制代碼。后來發現有宏遞歸這種東西(http://m.shnenglu.com/kevinlynx/archive/2008/08/20/59451.html boost中甚至直接有個macro庫),雖然內部實現可以少寫些代碼(用宏來幫助生成),但是其代碼看起來更糾結。:D

@deadlm
functor這種東西本質上確實如你所說是保存一個“函數”指針。其實偏要加上返回值類型以及各個參數的類型,我覺得主要還是哄好編譯器。
void func( int );
void func( int, char );
這兩個函數在語言層次畢竟屬于不同的類型,functor在回調他們時,需要知道傳多少個參數。這些信息都需要保存起來。
template在整個C++中完全屬于一種花哨的東西,當然不可否認其作用,如果實在煩這些,可以無視這些語言特性。

之所以我不敢“蔑視”STL、LOKI之類的庫,是因為我自認能力沒到這級別。也許以后我可以。

class lua_binder<R ( P1 )> 是lua_binder的偏特化,因為lua_binder本體只有一個類型參數,所以,不能寫:
class lua_binder<R, P1>。這么說來,在支持多參數函數的情況下,要么使用functor<int, TYPE_LIST1( ...的形式,要么使用functor<int (int)>的形式。對于functor<int, int>的形式,你指的是怎樣的實現?(很久沒在弄模板這些東西,有點生疏)。
@deadlm
并不見得functor<void, int, char>就比function< void, TYPE_LIST2( int, char )>好。
functor<void, int, char>是需要諸如:
template <typename R, typename P1>
class lua_binder<R ( P1 )>
的語法支持。而并不見得所有的編譯器都支持。另外,我沒有提供這樣的接口也并不見得我寫不出來:
http://m.shnenglu.com/kevinlynx/archive/2008/08/20/59451.html
http://m.shnenglu.com/kevinlynx/archive/2008/08/13/58684.html
另外,這里的TYPE_LIST機制取自于loki庫。佩服哥們有蔑視loki庫的魄力。
re: 基類角色之對象管理器 Kevin Lynx 2009-07-02 17:24
雖然不是很明白飯中淹關于LINK對象的意思,但是我獲得了靈感,寫了下面的代碼:
///
///
///
#include <stdio.h>
#include <list>

class ref_op
{
public:
virtual void be_null() { }
};

typedef std::list<ref_op*> RefOpList;
class ref_base
{
public:
~ref_base()
{
clear_ops();
}

void add_ref( ref_op *op )
{
_oplist.push_back( op );
}

void clear_ops()
{
for( RefOpList::const_iterator it = _oplist.begin();
it != _oplist.end(); ++ it )
{
(*it)->be_null();
}
}

private:
RefOpList _oplist;
};

template <typename _Tp>
class auto_null : public ref_op
{
public:
void fetch( _Tp *t )
{
_t = t;
t->add_ref( this );
}
auto_null<_Tp> &operator = ( _Tp *t )
{
fetch( t );
return *this;
}
void be_null()
{
_t = 0;
}
operator _Tp*()
{
return _t;
}
private:
_Tp *_t;
};

//////////////////////////////////////////////////////////////////////////////
class CMonster : public ref_base
{
};

class CMonsterAI
{
public:
void SetOwner( CMonster *pOwner )
{
m_Owner = pOwner;
}

void Test()
{
if( (CMonster*)m_Owner == NULL )
{
printf( "The owner is null.\n" );
}
else
{
printf( "The owner is NOT null.\n" );
}
}
private:
auto_null<CMonster> m_Owner;
};

int main()
{
CMonster *pMonster = new CMonster();
CMonsterAI *pAI = new CMonsterAI();
pAI->SetOwner( pMonster );
pAI->Test();
delete pMonster;
pAI->Test();
delete pAI;
return 0;
}

CMonster內部會保存一個CMonster的指針,當CMonster被刪除掉時,會自動更新CMonsterAI內部的CMonster“指針”為NULL。接口比較簡單:1)在會被引用(即被其他對象保存其指針)的類設計中派生(或組合)ref_base類,ref_base類簡單來說就是保存一個引用類對象列表,通過基類ref_op可以使得ref_base保存不同類型的引用類(例如CMonsterAI可以保存CMonster, CRegion也可以保存CMonster),ref_base在析構時自動回調引用類對象的be_null函數,be_null函數在auto_null類中自動把CMonster*設置為NULL。
通過重載operator=,使得SetOwner函數里不需要做其他操作(看起來)。
re: 基類角色之對象管理器 Kevin Lynx 2009-07-02 14:10
本質上就是通過讓其他模塊不保存這個object的直接指針,而是一個ID,然后通過一個manager由這個ID而獲取到這個object*,是可以有效減少指針無效的問題。但是,面對的最大問題就在于這個查找過程。你這里用的是std::map,我們用的是stdext::hash_map,我自己都覺得有點速度問題。希望能在這個問題上找到良好的解決辦法。:)
re: USACO 3.1 Stamps Kevin Lynx 2009-07-01 08:55
不要再在首頁發布這些東西了。基本上只有代碼,不知道發首頁的目的是什么。我的RSS READER訂閱了CPPBLOG首頁,但全是你的東西。
這個測試例子確實有問題。把一個對象(shared_ptr)和一個指針(string*)分別作為map的key,對象肯定會比指針慢。對象用于map的key會涉及到很多復制操作。
@owlcn
應該不支持重入。因為都是對同一個lua_State操作。
@mike7734@sina.com
你最好找人發一份c++ primer給你。:)
@adie
剛正在看vc2005中的xtree找原因。在_Lbound中,確實是因為_DEBUG_LT_PRED導致DEBUG和RELEASE使用了不同的代碼。而且確實是因為_Lbound是const的才導致this->comp也是const的。但是,在看到你評論之前我還沒反應過來:因為this->comp通過作為函數參數而去掉了const修飾,囧。
起碼真相大白了。3Q
@adie
1.我這里說的predicator,指的是less本身。包括傳給find_if的functor,都被我稱為predicator。STL內部保存這種predicator,都是以value的形式保存。既然是value的形式,就不會存在調用這個predicator的operator()必須要求其為bool (*)() const類型的。以前沒搞清楚這個問題,現在也沒關注過。
你舉的例子中,談的是這個predicator的bool operator()( ...)成員函數的參數為const&。對于less而言,它的這個operator()的參數是map內部保存的element。無論是從效率還是其他方面,是肯定要const&的。

2.初始化順序這個問題,我對鏈接器細節沒怎么關注過。不過,情況可能真如你所說。謝過。

@AJkm
是的。:)
@小馬
為什么你不打開libevent的源代碼搜索下evbuffer呢??
@小馬
在我印象里,evbuffer用于緩存邏輯層(即l基于libevent那一層)將要發送的數據,以及緩存從設備(fd)里讀取出的數據。
re: VS 2010 C++ 王者歸來 Kevin Lynx 2009-04-28 13:46
個人從來沒有認為C/C++就是窮途末路。技術環境在浮躁,也不至于認為某個語言不行了。
C++0x的新特性看起來還比較有趣。

傳說中的小C
灌水,支持<unix編程藝術>
@happyday
代碼確實粘貼錯誤,謝謝提醒。

@無名
圖確實存在問題,謝謝提醒。

文章已做過微小修改。
@阿斯蒂芬
能不能具體點?哪個文件,哪一行?
我稍微搜索了下代碼,發現只有在fun_test.txt里才有sizeof( addr ),這個文件是用于功能測試的,只要kl_memcached下的源文件編譯得過你就可以使用。:)
共6頁: 1 2 3 4 5 6 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            美国成人毛片| 国产欧美一区二区三区在线看蜜臀| 日韩午夜在线电影| 最新国产拍偷乱拍精品| 久久人人看视频| 久久久久久久久岛国免费| 亚洲国产精品va在线看黑人| 亚洲电影毛片| 亚洲视频在线观看网站| 亚洲欧美999| 久久国产精品色婷婷| 麻豆精品91| 亚洲卡通欧美制服中文| 亚洲欧美日韩成人| 久久久五月婷婷| 欧美日产在线观看| 国产精品入口福利| 伊人久久亚洲影院| 亚洲精品一区二区三区福利| 亚洲免费在线电影| 久久天堂精品| 日韩午夜精品| 久久精品亚洲一区| 欧美理论在线| 国产一区二区三区四区三区四 | 久久天堂国产精品| 欧美91视频| 中文一区在线| 久久国产手机看片| 欧美日韩中文字幕在线视频| 国产在线不卡视频| 国产精品99久久久久久久女警| 亚洲一品av免费观看| 久久久夜夜夜| 中文日韩在线视频| 久久亚洲私人国产精品va| 欧美精品在线视频观看| 国产亚洲综合在线| 午夜国产精品影院在线观看| 亚洲欧洲日夜超级视频| 欧美一区二区三区免费看| 欧美日韩小视频| 亚洲欧洲日产国码二区| 久久深夜福利免费观看| 亚洲免费在线观看视频| 欧美日韩在线一二三| 一区二区在线观看av| 欧美淫片网站| 亚洲视频第一页| 欧美日韩一区高清| 一区二区激情| 日韩一级精品视频在线观看| 欧美日韩第一区| 夜夜嗨av一区二区三区免费区| 欧美高清视频在线| 久久天天综合| 狠久久av成人天堂| 久久婷婷国产综合国色天香| 欧美一区二区三区四区视频| 国产农村妇女精品一二区| 久久精品av麻豆的观看方式| 久久久成人网| 国产精品久久午夜夜伦鲁鲁| 一区二区av在线| 欧美国产日韩亚洲一区| 久久精品免费看| 狠狠入ady亚洲精品| 久久精品亚洲一区二区| 欧美在线视频免费观看| 韩国av一区二区三区在线观看 | 欧美一区二区视频在线观看2020| 亚洲视频精品在线| 国产精品久久久久久久久婷婷| 午夜精品视频| 久久精品国产第一区二区三区最新章节| 国产精品一区二区在线| 久久国产精品一区二区三区| 久久久国产精品一区二区三区| 亚洲国产女人aaa毛片在线| 亚洲欧洲一区二区三区| 国产精品久久777777毛茸茸| 久久精品人人| 欧美阿v一级看视频| 中文国产亚洲喷潮| 亚洲欧美电影院| 狠狠干综合网| 91久久精品一区| 欧美新色视频| 久久九九精品99国产精品| 欧美综合二区| 亚洲精品视频一区| 一区二区三区av| 在线播放精品| 亚洲图片你懂的| 亚洲丁香婷深爱综合| 一本一本久久a久久精品综合麻豆| 国产农村妇女毛片精品久久莱园子| 久久精品视频导航| 欧美黄色aa电影| 欧美亚洲综合网| 免费成人av| 性欧美video另类hd性玩具| 可以免费看不卡的av网站| 亚洲综合国产激情另类一区| 久久久综合香蕉尹人综合网| 亚洲美女av黄| 欧美一区二区三区四区在线| 日韩视频在线你懂得| 亚洲欧美日韩国产精品| 亚洲人成网站影音先锋播放| 亚洲综合三区| 99re视频这里只有精品| 久久久精品国产一区二区三区| 在线亚洲+欧美+日本专区| 久久久精品午夜少妇| 亚洲尤物在线| 欧美好吊妞视频| 老巨人导航500精品| 国产精品久久久久久超碰| 欧美激情影院| 一区在线免费观看| 亚洲欧美资源在线| 久久精精品视频| 日韩午夜电影av| 亚欧美中日韩视频| 午夜国产精品视频免费体验区| 欧美精品v日韩精品v韩国精品v| 蜜臀av国产精品久久久久| 国产亚洲美州欧州综合国| 亚洲免费在线精品一区| 午夜精品一区二区三区电影天堂| 欧美日韩精品福利| 亚洲精品网址在线观看| 亚洲免费不卡| 欧美日韩黄色大片| 99视频在线精品国自产拍免费观看| 亚洲乱码国产乱码精品精可以看 | 国产精品日本一区二区| 在线一区二区日韩| 中文欧美日韩| 欧美日韩中文另类| 在线视频亚洲| 香蕉久久国产| 国产一区二区三区四区hd| 久久精品青青大伊人av| 免费久久99精品国产| 亚洲国产欧美日韩精品| 欧美激情在线观看| 99国产精品久久| 欧美一级播放| 经典三级久久| 欧美激情在线免费观看| 中文一区字幕| 久久一区二区三区四区五区| 亚洲第一精品在线| 欧美国产极速在线| 宅男噜噜噜66国产日韩在线观看| 性亚洲最疯狂xxxx高清| 国产亚洲精品久久久久动| 久久午夜精品一区二区| 亚洲人屁股眼子交8| 亚洲一区久久| 国产一区视频观看| 欧美丰满高潮xxxx喷水动漫| 在线亚洲自拍| 农村妇女精品| 亚洲午夜精品国产| 国产一区二区三区在线观看免费视频| 久久青草久久| 一区二区三区国产精华| 久久一综合视频| 国产精品99久久久久久www| 国产亚洲一区精品| 欧美日韩国产丝袜另类| 久久狠狠一本精品综合网| 亚洲精品免费一区二区三区| 久久国产精品一区二区三区四区| 亚洲激情中文1区| 国产精品腿扒开做爽爽爽挤奶网站| 久久噜噜亚洲综合| 宅男精品导航| 亚洲国产欧美不卡在线观看| 欧美在线|欧美| 99精品国产在热久久下载| 国内成+人亚洲+欧美+综合在线| 欧美三级视频在线| 欧美 日韩 国产一区二区在线视频| 亚洲欧美日韩另类| 亚洲精品乱码久久久久| 另类图片综合电影| 午夜欧美不卡精品aaaaa| 亚洲乱码国产乱码精品精98午夜 | 亚洲影院色无极综合| 国产精品亚洲综合久久| 欧美国产日韩亚洲一区| 久久男人av资源网站| 欧美亚洲网站| 亚洲欧美国产高清| 一区二区免费在线播放| 亚洲人成在线播放网站岛国|