锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久涩综合,亚洲七七久久精品中文国产,青青草原综合久久http://www.shnenglu.com/Error/category/19521.htmlzh-cnSat, 23 Jun 2012 13:47:11 GMTSat, 23 Jun 2012 13:47:11 GMT60(杞?boost::implicit_casthttp://www.shnenglu.com/Error/archive/2012/06/23/179905.htmlEnicEnicSat, 23 Jun 2012 13:34:00 GMThttp://www.shnenglu.com/Error/archive/2012/06/23/179905.htmlhttp://www.shnenglu.com/Error/comments/179905.htmlhttp://www.shnenglu.com/Error/archive/2012/06/23/179905.html#Feedback0http://www.shnenglu.com/Error/comments/commentRss/179905.htmlhttp://www.shnenglu.com/Error/services/trackbacks/179905.htmlboost::implicit_cast

鍦╯tackoverflow涓婄湅鍒?a >榪欎釜甯栧瓙, 浜庢槸鍙戠幇浜哹oost::implicit_cast榪欎釜灝忎笢瑗?

鍏堟潵鐪嬬湅榪欐浠g爜:

struct top {};
struct mid_a : top {};
struct mid_b : top {};
struct bottom : mid_a, mid_b {};

void foo(mid_a&) {}
void foo(mid_b&) {}
void bar(bottom &arg) {
    foo(arg); // 鎯寵璋冪敤"void foo(mid_a&)"
}

int main() {
    bottom x;
    bar(x);
    return 0;
}

鏄棤娉曠紪璇戦氳繃鐨? 鍥犱負foo鐨勯噸杞借В鏋愭湁姝т箟. 閭d箞鎶奲ar閲岀殑浠g爜鏀逛竴鏀? 涓轟簡淇濇寔C++椋庢牸, 鎴戜滑浣跨敤static_cast, 鑰屼笉鏄疌椋庢牸鐨勮漿鎹?

foo(static_cast<mid_a&>(arg));

紼嬪簭緙栬瘧閫氳繃浜? 榪愯璧鋒潵涔熸病鏈夐棶棰? 鐒惰?#8230;

涓涓湀浠ュ悗鎴戞妸bar鐨勫弬鏁扮被鍨嬩慨鏀逛簡涓涓?

struct top {};
struct mid_a : top {};
struct mid_b : top {};
struct bottom : mid_a, mid_b {};

void foo(mid_a&) {}
void foo(mid_b&) {}
void bar(top &arg) {
    // ... 榪囦簡涓涓湀, 榪欓噷宸茬粡娣誨姞浜嗗緢澶氫唬鐮?
    foo(static_cast<mid_a&>(arg));
}

int main() {
    top x;
    bar(x);
    return 0;
}

浠g爜渚濇棫緙栬瘧閫氳繃, 鍙槸榪愯鏃剁▼搴忔寕鎺変簡(鍋囪榪欏嚑涓被閲岄潰鏈夎澶氭垚鍛? 騫朵笖鍦╢oo閲屽鍏惰繘琛屼簡璁塊棶).

鍙戠幇闂浜嗗悧? 鍘熷洜灝卞湪浜巗tatic_cast澶己澶т簡, 寮哄ぇ鍒板彲浠ヨ繘琛?#8221;down-cast”. 浜庢槸緙栬瘧鍣ㄦ病鏈夌粰浣犱換浣曡鍛? 灝辨妸涓涓猼op綾誨瀷鐨勫紩鐢ㄧ粰寮哄埗杞崲鎴愪簡min_a鐨勫紩鐢?

榪欎釜鏃跺欒疆鍒癰oost::implicit_cast鍑哄満浜? 鎶奲ar閲岄潰鐨勯偅鍙oo璋冪敤鏀逛竴鏀?

foo(boost::implicit_cast<mid_a&>(arg));

浜庢槸涓涓湀鍓嶇殑浠g爜渚濇棫鍙互閫氳繃緙栬瘧, 鑰屼竴涓湀鍚庣殑浠g爜涓殑閿欒琚紪璇戝櫒鎻嚭鏉ヤ簡. 鍘熷洜鍦ㄤ簬闅愬紡綾誨瀷杞崲涓嶅厑璁?#8221;down-cast”, 鍙兘”up-cast”.

榪欓噷綆瑕佽涓涓嬫墍璋撴樉寮忓拰闅愬紡綾誨瀷杞崲鐨勫尯鍒? 鍦–++涓栫晫鐨勮嫳鏂囬噷, 鎴戜滑璇?#8221;convert”閫氬父鎸?#8221;implicit convert”, 鑰?#8221;cast”鎸?#8221;explicit cast”. 闅愬紡綾誨瀷杞崲濂界悊瑙? 灝辨槸浣犲啓浜嗕釜a=b, 鑰宎b涓嶅悓綾誨瀷, 緙栬瘧鍙堜笉鎶ラ敊, 灝辮鏄庨殣寮忕被鍨嬭漿鎹㈠彂鐢熶簡, 綾諱技鐨勬儏鍐佃繕鏈夊湪鍑芥暟璋冪敤鐨勫弬鏁頒紶閫掓椂. 鑰屾樉寮忕被鍨嬭漿鎹㈢壒鎸嘋椋庢牸鐨勫己鍒惰漿鎹?(type)obj鎴栬匔++涓瓑浠風殑type(obj)), 浠ュ強C++椋庢牸鐨勫洓涓叧閿瓧(static_cast, const_cast, dynamic_cast, reinterpret_cast). 鐒惰岃繖涓畾涔夋槸鐩稿綋妯$硦鐨? 姣斿涓涓猧nt綾誨瀷鐨剎, bool(x)鏄樉寮忕殑, 鑰?!x鏄殣寮忕殑, 鍏跺疄鏁堟灉涓婂茍娌℃湁鍖哄埆, 鍙槸瀛楅潰涓婄殑涓嶅悓緗簡. (鍏充簬cast鍜宑onvert鐨勫尯鍒? 鍙傝榪欓噷鍜?a >榪欓噷)

鎵浠ュ湪bar閲屾垜浠渶瑕佺殑浠呬粎鏄竴涓殣寮忕被鍨嬭漿鎹? 鐒惰岀洿鎺ユ妸arg浼犻掔粰foo鐨勮瘽浼氬嚭鐜伴噸杞芥涔? 浜庢槸鎴戜滑闇瑕佸憡璇夌紪璇戝櫒鍒板簳瑕佽繘琛屽摢涓殣寮忕被鍨嬭漿鎹? 鐒惰宻tatic_cast鍙堝お榪囧己澶? 瀹冭繕鑳藉仛闅愬紡綾誨瀷杞崲涔嬪鐨勪簨鎯?up-cast), 浜庢槸鍦ㄦ棩鍚庝唬鐮佹紨鍖栫殑榪囩▼涓暀涓嬩簡bug.

浜庢槸boost::implicit_cast搴旇繍鑰岀敓, 瀹冩瘮static_cast寮? 姝e瀹冪殑鍚嶅瓧涓鏍? 瀹冨彧鑳界敤鏉ュ憡璇夌紪璇戝櫒鎵ц浠涔堥殣寮忕被鍨嬭漿鎹?

鑰屽畠鐨勪唬鐮佸憿? 綆鍗曞埌浠や漢鍙戞寚:

template <typename T>
inline T implicit_cast (typename mpl::identity<T>::type x) {
    return x;
}

鑰宮pl::identity鐨勫畾涔変篃鏋佸叾綆鍗?

template<typename T> struct identity { typedef T type; };

鏈変漢瑕侀棶榪欎釜identity騫蹭粈涔堢敤鐨? 鐪嬭搗鏉ュ緢绱禈. 濡傛灉娌℃湁榪欎釜identity, 鍍?#8221;implicit_cast(obj)”榪欐牱鐨勪唬鐮佷篃鑳介氳繃緙栬瘧, 鐒惰屽畠鍏跺疄浠涔堜篃娌″仛, obj鐨勭被鍨嬩粛鐒舵病鍙? identity鐨勫瓨鍦ㄤ嬌寰楀嚱鏁版ā鏉跨殑鍙傛暟綾誨瀷鎺ㄥ澶辨晥, 鍥犱負瑕佹帹瀵煎嚭T, 棣栧厛寰楃煡閬搃dentity鏄粈涔? 鑰宨dentity鍙堟槸渚濊禆浜嶵鐨? 浜庢槸灝卞艦鎴愪簡寰幆渚濊禆, 鍙傛暟綾誨瀷鎺ㄥ灝卞け鏁堜簡. 浜庢槸緙栬瘧鍣ㄥ氨瑕佹眰浣犳樉寮忓湴鎸囧畾T鐨勭被鍨?



Enic 2012-06-23 21:34 鍙戣〃璇勮
]]>
久久夜色精品国产www| 色偷偷88888欧美精品久久久| 国内精品久久久久影院优| 久久久精品国产sm调教网站 | 久久综合给久久狠狠97色| 无码日韩人妻精品久久蜜桃| 97久久精品无码一区二区天美| 狠狠精品干练久久久无码中文字幕 | 国内精品欧美久久精品| yy6080久久| 亚洲国产精久久久久久久| 亚洲精品无码久久久| 久久99精品久久久久子伦| 亚洲伊人久久综合影院| www.久久热.com| 亚洲国产精品无码成人片久久| 狠狠色伊人久久精品综合网| 亚洲国产另类久久久精品黑人 | 品成人欧美大片久久国产欧美| 亚洲精品国产综合久久一线| 精品久久久久久久| 久久夜色精品国产噜噜噜亚洲AV | 2021久久精品国产99国产精品| 久久久久久毛片免费看| 精品久久久久久中文字幕| 亚洲精品无码久久久久久| 久久天天躁狠狠躁夜夜2020| 精品精品国产自在久久高清| 久久久久久亚洲AV无码专区| 久久婷婷色综合一区二区| 国产精品免费久久久久电影网| 精品熟女少妇av免费久久| 亚洲午夜久久久久久久久电影网 | 久久狠狠高潮亚洲精品| 亚洲国产精品一区二区久久hs | 国内精品久久久久影院免费| 婷婷伊人久久大香线蕉AV | 久久综合狠狠综合久久综合88| 色播久久人人爽人人爽人人片AV| 久久有码中文字幕| 欧美一级久久久久久久大|