我注重到2003年斯坦福大學(xué)公開(kāi)的一份C++ and Object-Oriented PRogramming教案中明確提到了函數(shù)多態(tài)概念:Function overloading is also referred to as function polymorphism as it involves one function having many forms。文后的“參考文獻(xiàn)”單元給出了這個(gè)網(wǎng)頁(yè)鏈接。
可能你是第一次看到宏多態(tài)(macro polymorphism)這個(gè)術(shù)語(yǔ)。不必訝異 — 也許我就是造出這個(gè)術(shù)語(yǔ)的“第一人”。顯然,帶變量的宏(或類(lèi)似于函數(shù)的宏或偽函數(shù)宏)的替換機(jī)制除了免除小型函數(shù)的調(diào)用開(kāi)銷(xiāo)之外,也表現(xiàn)出了類(lèi)似的多態(tài)性。在我們上面的例子中,字符串相加所表現(xiàn)出來(lái)的符合直覺(jué)的連接操作,事實(shí)上是由底部運(yùn)算符重載機(jī)制(Operator overloading)支持的。值得指出的是,C++社群中有人將運(yùn)算符重載所表現(xiàn)出來(lái)的多態(tài)稱(chēng)為ad hoc polymorphism。
David Vandevoorde和Nicolai M. Josuttis在他們的著作C++ Templates: The Complete Guide一書(shū)中系統(tǒng)地闡述了靜態(tài)多態(tài)和動(dòng)態(tài)多態(tài)技術(shù)。因?yàn)檎J(rèn)為“和其他語(yǔ)言機(jī)制關(guān)系不大”,這本書(shū)沒(méi)有提及“宏多態(tài)”(以及“函數(shù)多態(tài)”)。(需要說(shuō)明的是,筆者本人是這本書(shū)的繁體中文版譯者之一,本文正是基于這本書(shū)的第14章The Polymorphic Power of Templates編寫(xiě)而成)