本原則還是面向模版類編程而言的烧颖。
其實(shí)本原則內(nèi)容主要是針對這么一種情況湃累。你的父類是一個(gè)模版類不在編譯期是無法具體化的拴疤,這樣編譯器就無法確切得知這個(gè)時(shí)候的父類具體長成啥樣邦蜜,而一般來講泛型肯定是要被特化的媳拴,就是具體化黄橘。你要知道一旦一個(gè)東西被具體化它就往往失去了通用性,那么這時(shí)你的一個(gè)具體的子類要繼承一個(gè)抽象的模版父類屈溉,具體化以后這個(gè)具體的子類和這個(gè)具體的父類之間能否很好的對接塞关,編譯器不敢保證,因此編譯器默認(rèn)的選擇拒絕調(diào)用父類成員函數(shù)子巾。
為了解決這個(gè)問題帆赢,你就要顯式地告訴編譯器你就要這么干,于是作者提出三種解決方法线梗。1椰于、使用this指針顯式指出;2仪搔、使用using聲明式瘾婿;3、父類名+域操作符。
不過如果你調(diào)用的virtual函數(shù)憋他,這樣做會(huì)導(dǎo)致virtual的動(dòng)態(tài)綁定行為失敗孩饼。
但是,我在VS上做了一個(gè)實(shí)驗(yàn)竹挡,就是用一個(gè)具體類去繼承一個(gè)模版類镀娶。如果不對子類進(jìn)行完全特化的話編譯根本通不過,而在寫語句的時(shí)候并沒有提出錯(cuò)誤或者警告揪罕,這說明C++編譯器最起碼VS是在編譯期進(jìn)行特化的梯码。這說明本原則所講之方法多多少少有些過時(shí),或者在你不經(jīng)意間編譯器已經(jīng)幫你攔截了錯(cuò)誤好啰。
總結(jié)一下作者的觀點(diǎn):
可在子類中通過this或者其他修飾符來顯式指定模版父類的成員轩娶。