锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
http://m.shnenglu.com/shenhuafeng/
寮濮?>紼嬪簭->Microsoft Visual Studio .NET 2003
->Visual Studio .NET 宸ュ叿"->"Visual Studio .NET 2003 鍛戒護鎻愮ず"
鐒跺悗鍦ㄦ鐜涓嬪垏鎹㈠埌boost_1_33_1\tools\build\jam_src鐩綍:
榪愯build緙栬瘧銆傞敭鍏uild榪涜bjam鐨勭紪璇戙?/p>
灝哹jam.exe鎷瘋礉鍒版牴鐩綍搴曚笅錛岃繍琛宐jam錛岃繘琛孊oost搴撶殑緙栬瘧濡傛灉鏄疺C2005鐨勮瘽錛屽垯闇瑕佸姞鍙傛暟bjam sTOOLS=vc-8_0
灝哹oost鐨勬簮鏂囦歡浠ュ強搴撴斁鍒癐DE宸ュ叿鑳藉鎵懼埌鐨勫湴鏂癸紝榪欐牱灝卞畬鎴愪簡瀹夎銆?/p>
鍓嶄笉涔呴槄璇諱簡涓涓嬄燗ndrei Alexandrescu鐨勫ぇ浣溿奙odern C++ Design銆嬶紝娣卞彈鍚彂銆傜幇鍐欎竴浜涜鍚庢劅錛屼竴涓槸淇冭繘鑷繁瀛︿範錛屼簩鑰呮槸甯屾湜澶у浜ゆ祦錛屾姏鐮栧紩鐜夈?/p>
璇村埌搴昉olicy Based Class Design鏄熀浜嶵emplete妯$増鐨凾emplete緇勪歡璁捐鎶鏈紝灝辨槸鐢ㄥ唴Templete鏉ヤ綔涓篜olicy涓哄Templete鎻愪緵鍙厤緗殑鏈嶅姟銆?/p>
渚嬪錛?/p>
聽template聽
<
聽
class
聽聽T,Template聽
<
聽
class
聽
>
聽聽聽
class
聽聽聽Policy1,Template聽
<
聽
class
聽
>
聽
class
聽聽Policy2聽聽
>
聽
聽
class
聽聽PolicyBasedClass錛?/span>
public
聽Policy1聽
<
聽T聽
>
聽,
public
聽Policy2聽
<
聽T聽
>
聽
聽聽聽
{
}
聽
褰撶劧Policy1涔熷彲浠ヤ笉渚濊禆浜庢ā鐗圱銆傚悓鏍稰olicy2涔熷彲浠ャ傝繖鏍蜂篃褰撶劧涔熷彲浠ャ?/p>
聽
聽template聽
<
聽
class
聽聽T,聽
class
聽聽聽Policy1,
class
聽聽Policy2聽聽
>
聽
聽
class
聽聽PolicyBasedClass錛?/span>
public
聽Policy1聽,
public
聽Policy2
{
}
聽
聽
褰撶劧絎竴涓緥瀛愭洿鍔犲叿鏈夐氱敤鎬с?/p>
榪欐牱浣犲彲浠ヤ唬鍏ヤ笉鍚岀殑Policy Class錛屾潵鏀瑰彉PolicyBasedClass鐨勮涓恒?/p>
鑰屾墍鏈夌殑閰嶇疆閮芥槸鍦ㄧ紪璇戦樁孌靛畬鎴愮殑錛岃屼笉鏄疪unTime錛屾墍浠ユ病鏈変換浣曠殑鎬ц兘鎹熷け銆?/p>
鏈変漢璇達紝鎴戝彲浠ュ姞涓弬鏁幫紝瀵硅繖涓狢lass鍋氶噸杞斤紝褰撶劧鏄彲浠ョ殑錛岃屼笖鍙互鑾峰緱榪愯鏃跺埢鐨勭伒媧繪э紝褰撶劧緋葷粺鐨勫紑閿鐩稿涔熶細澶т竴浜涖?/p>
鎵浠ヤ釜浜鴻涓猴紝PolicyBasedClass鏇村姞閫傚悎浜庡仛涓浜汧ramework鐨勫伐浣溿備緥濡傝璁′竴涓熀紜鐨勬鏋跺簱錛岃繖涓妧鏈氨寰堝疄鐢ㄣ傛墍浠oki涔熸槸榪欐牱瀛愮殑涓涓簱銆?/p>
namespace
聽SHFTest
...
{
聽聽聽聽template聽
<
class
聽T
>
聽聽聽聽
struct
聽OpNewCreator
聽聽聽聽
...
{
聽聽聽聽聽聽聽聽
static
聽T
*
聽Create()
聽聽聽聽聽聽聽聽
...
{
聽聽聽聽聽聽聽聽聽聽聽聽
return
聽
new
聽T;
聽聽聽聽聽聽聽聽}
聽聽聽聽
protected
:
聽聽聽聽聽聽聽聽
~
OpNewCreator()
...
{}
;
聽聽聽聽}
;
聽聽聽聽template聽
<
class
聽T
>
聽聽聽聽
struct
聽MallocCreator
聽聽聽聽
...
{
聽聽聽聽聽聽聽聽
static
聽T
*
聽Create()
聽聽聽聽聽聽聽聽
...
{
聽聽聽聽聽聽聽聽聽聽聽聽T
*
聽buf聽
=
聽(T
*
)std::malloc(
sizeof
(T));
聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽
!
buf聽)
聽聽聽聽聽聽聽聽聽聽聽聽
...
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
聽
0
;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽
return
聽buf;
聽聽聽聽聽聽聽聽}
聽聽聽聽
protected
:
聽聽聽聽聽聽聽聽
~
MallocCreator()
...
{}
;
聽聽聽聽}
;
聽聽聽聽template聽
<
class
聽T
>
聽聽聽聽
struct
聽ProtypeCreator聽
聽聽聽聽
...
{
聽聽聽聽
public
:
聽聽聽聽聽聽聽聽T
*
聽Create()
聽聽聽聽聽聽聽聽
...
{
聽聽聽聽聽聽聽聽聽聽聽聽
return
聽
/**/
/*
pPrototype_聽?聽pPrototype_->Clone()聽:
*/
聽
0
;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽T
*
聽GetPrototype()聽
...
{聽
return
聽pPrototype_;聽}
聽聽聽聽聽聽聽聽
void
聽SetPrototype(T
*
聽pObj)聽
...
{聽pPrototype_聽
=
聽pObj;聽}
聽聽聽聽
protected
:
聽聽聽聽聽聽聽聽
~
ProtypeCreator()
...
{}
;
聽聽聽聽
private
:
聽聽聽聽聽聽聽聽T
*
聽pPrototype_;
聽聽聽聽}
;
聽聽聽聽template
<
聽聽聽聽聽聽聽聽聽聽聽聽
class
聽T,
聽聽聽聽聽聽聽聽聽聽聽聽template聽
<
class
>
聽
class
聽CreatePolicy聽
=
聽OpNewCreator
聽聽聽聽聽聽聽聽聽聽聽聽
>
聽聽聽聽
class
聽CommonObj:
public
聽CreatePolicy
<
T
>
聽聽聽聽
...
{
聽聽聽聽
public
:
聽聽聽聽聽聽聽聽CommonObj()
聽聽聽聽聽聽聽聽
...
{
聽聽聽聽聽聽聽聽聽聽聽聽CreatePolicy
<
T
>
::Create();
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
~
CommonObj()
...
{}
聽聽聽聽聽聽聽聽
void
聽Test()
聽聽聽聽聽聽聽聽
...
{
聽聽聽聽聽聽聽聽聽聽聽聽std::cout
<<
"
Hello聽World
"
;
聽聽聽聽聽聽聽聽}
聽聽聽聽
protected
:
聽聽聽聽}
;
}
int
聽_tmain(
int
聽argc,聽_TCHAR
*
聽argv[])
...
{
聽聽聽聽typedef聽SHFTest::CommonObj
<
int
,SHFTest::ProtypeCreator
>
聽myProtypeObj;
聽聽聽聽myProtypeObj聽Testobj1;
聽聽聽聽Testobj1.Test();
聽聽聽聽typedef聽SHFTest::CommonObj
<
int
>
聽myObj;
聽聽聽聽myObj聽Testobj2;
聽聽聽聽Testobj2.Test();
聽聽聽聽
return
聽
0
;
}
Modern C++ Design鐨勭涓绔犲氨鏄疨olicy Based Class Design,鍙璇ユ妧鏈槸鏁翠釜Loki搴撶殑璁捐鍩虹.榪欑鏂瑰紡鐨勪紭鐐規槸鑳藉澧炲姞紼嬪簭搴撶殑寮規у拰鎻愰珮澶嶇敤鎬?
綆鍗曟潵璇村氨鏄?涓涓狿olicy Based Class鐢卞緢澶氬熀鏈殑Policy鏉ョ粍鎴愮殑,姣忎釜Policy Class浠h〃浜嗚澶嶆潅綾?鐩稿澶嶆潅)綾葷殑鏌愪簺琛屼負鎴栬呯壒鎬?鏈夌偣綾諱技浜庣被鐨勭戶鎵匡紝褰撶劧鍜岀被鐨勭戶鎵挎槸涓嶅悓鐨勩?br />閭d箞Policy Based Class鏈変粈涔堢敤鍛紵鎴戜滑鍏堢湅涓嬮潰榪欎釜闂銆?br />鍋囧闇瑕佽璁′竴涓熀紜搴擄紝鍙兘鏄熀浜庢煇涓壒瀹氶鍩熺殑錛岄偅涔堝簱鐨勮璁¤呭氨闇瑕佽冭檻榪欐牱鐨勯棶棰橈紝浠栭渶瑕佸皢鏈潵鐨勫彲鑳界殑闇姹傚姞浠ュ垎綾伙紝鎶借薄鍑哄眰嬈★紝鐒跺悗榪愮敤OO鎬濇兂錛屽笇鏈涜兘澶熸瀯閫犲嚭涓涓紑鍙戠殑緇撴瀯錛屽綋鐒跺叾涓殑component鐨勮璁″綋鐒舵槸瓚婃槸鐏墊椿瓚婂ソ銆?br />鐢ㄤ紶緇熺殑OO璁捐鎬濇兂錛屽彲鑳藉彲浠ヨ璁″嚭涓濂楅潪甯稿畬鍠勭殑綾誨簱 錛屽彲鑳藉寘緗椾竾璞°傚綋鐒剁殑瀵逛簬搴旂敤寮鍙戜漢鍛橀渶瑕佽姳寰堝鏃墮棿鍘誨涔犺繖涓滃寘緗椾竾璞♀濈殑鍩虹綾誨簱銆傝屼笖寰寰榪欐牱鐨勫熀紜搴撲笉鏄氱敤鎬т笉寮哄氨鏄檺鍒舵潯浠跺お澶氾紙渚嬪MFC錛夊彲浠ヨ灝辨槸榪欐牱涓縐嶇被鍨嬬殑搴撱?/p>
涓嬮潰瑕佸睍紺轟竴涓嬭繍鐢ㄥ閲嶇戶鎵夸互鍙奣empletes鏉ュ疄鐜扮殑policy class,涓句竴涓畝鍗曠殑渚嬪瓙錛?br />鍋囧鎴戜滑闇瑕佸彂鏄庝竴涓伅錛屽畠鏈変笉鍚岀殑縐嶇被錛屾湁浣跨敤涓嶅悓鑳芥簮鐨勫伐浣滄柟寮忎互鍙婃湁涓嶅悓鐨勬搷浣滄柟寮忥紝濡傛灉榪愮敤
policy based class鏉ヨ璁$殑璇濓紝鍙兘鏄繖鏍風殑緇撴瀯錛?br />
templete
<
聽聽聽聽
class
聽T,
聽聽聽聽templete聽
<
class
>
聽
class
聽Work,
聽聽聽聽templete聽
<
class
>
聽
class
聽OpMethod
>
class
聽Light
聽聽聽聽:
public
聽Work
<
T
>
,
聽聽聽聽聽聽聽聽OpMethod
<
Light
>
{
聽聽聽聽T
*
聽xxOp()
聽聽聽聽
{
聽聽聽聽聽聽聽聽
if
(Work(T).Status聽
==
聽ACMODE)
聽聽聽聽聽聽聽聽聽聽聽聽OpMethod(
*
this
);
聽聽聽聽}
}
褰撲綘瀹炰緥鍖栦竴涓狿olicy Based Class鐨勬椂鍊欙紝浣犺繕鍙互緇欏嚭榛樿鐨勫疄鐜幫紝灝卞儚鎴愬憳鍑芥暟澹版槑鍜屽畾涔夋椂鍊欑粰鍑虹殑榛樿鍙傛暟涓鏍楓?/p>
鍥炲ご鏉ョ湅涓涓嬪閲嶇戶鎵垮拰Templetes鐨勭壒鎬э細
澶氶噸緇ф壙錛氭瑺緙轟竴縐嶄竴鎴愪笉鍙樼殑鍙互濂楃敤鐨勪唬鐮侊紝鍦ㄦ煇縐嶅彈鎺х殑鎯呭喌涓嬪皢緇ф壙鐨凜lass緇勫悎璧鋒潵錛堝閲嶇戶鎵垮彧鏄皢浠栦滑鏀懼湪涓璧鳳紝鐒跺悗鎻愪緵涓縐嶈闂柟寮忥級銆俆empletes錛氭湁榪欐牱鐨勭壒鎬с?br />澶氶噸緇ф壙鐢變簬緇ф壙鑷涓狟ase Class錛屾墍浠ュ瀷鍒俊鎭己涔忥紝鑰孴empletes姝e紡鍩轟簬鍨嬪埆鐨勩?br />澶氶噸緇ф壙瀹規槗鎵╁紶錛岃孴empletes鐨勭壒鍖栦笉瀹規槗鎵╁紶銆?/p>
姝f槸涓ら」鎶鏈殑浜掕ˉ錛屾墠浣胯繖鏍風殑鎶鏈疄鐜版垚涓哄彲鑳姐?br />Light瀵硅薄緇ф壙澶氫釜policy class,浣垮緱鐗規у緱浠ュ湪緙栬瘧鏈熼棿瀹氬鹼紝浠庤屽疄鐜癓ight Class鍔熻兘鐨勬墿寮犮?br />鑰孴empletes鎶鏈嬌寰楀ぇ閮ㄥ垎Work浠ュ強OpMethod鑳藉鍏變韓澶ч儴鍒嗗熀紜浠g爜錛岃屽鐗瑰畾鐨勭増鏈疄鐜板畾鍊箋?/p>
榪欐牱鐨勫ソ澶勫氨鏄紝搴旂敤紼嬪簭寮鍙戜漢鍛樺緱浠ュ湪搴旂敤璁捐鏃舵湡錛屼嬌鐢ㄨ繖浜汣lass錛岄夋嫨閫傚悎鑷繁鐨凱olicy緇勮鑷繁鐨勪唬鐮侊紝浠庤屼嬌寰楃▼搴忓ぇ灝忓緱浠ョ簿鍑忥紝榪愯閫熺巼寰椾互鎻愰珮錛岃屼笉蹇呭幓鍖呭惈鏁翠釜鍙堝ぇ鍙堝叏鐨勫熀紜綾誨簱銆?/p>
浠ヤ笂鍙槸涓浜涘涔犵殑蹇冨緱鍜屼綋浼氾紝濡傛灉鏈変笉瀵圭殑鍦版柟錛屽笇鏈涘ぇ瀹跺澶氭寚鏁欍?/p>