2013-11-27 268 views
2

我回顧這段代碼:繼承模板?

class WhiteVolatility:public Inverted<IBlackVolatility> {blablabla function declarations} 

因此類WhiteVolatility就是從這裏模板繼承...和模板類是一個抽象類(IBlackVolatility)。我無法完全理解這裏發生了什麼 - 但我的實際問題是:爲什麼要使用這種設計?有什麼好處?

讓我在評論中知道,如果我的問題是不可能的回答,你需要更多的信息(我不能告訴,因爲我沒有信心是怎麼回事)

+2

這看起來像CRTP也許? http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern – OmnipotentEntity

+2

在這種情況下,它將繼承自'Inverted ' – Paranaix

+0

@OmnipotentEntity,它不是,CRTP描述:'template class D:B {}',至於用例,很難說不知道什麼'IBlackVolatility'提供給'倒置' – Nim

回答

6

Inverted是一個類模板。這裏使用了一個特定的模板實例Inverted<IBlackVolatility>,它與任何普通類都變得完全一樣,並且WhiteVolatility繼承自該普通類。沒有什麼奇怪的:)

至於語義上,從名字我猜想Inverted模板顛倒其模板參數(這裏它似乎是顏色,因爲你的黑色波動變成白色)的東西。

3

因此類WhiteVolatility就是從這裏模板繼承...

它從模板專業化,不是一個模板繼承。類模板專業化是一個普通的類。

和模板類是一個抽象類

沒有,模板參數是(大概)一個抽象類。專業化是通過替換模板參數IBlackVolatility的事件以常規方式從模板生成的。

爲什麼要使用這種設計?有什麼好處?

您可以從模板專業化繼承,這正是您從任何其他類繼承的原因 - 實現它定義的接口,或者(可能)將其行爲合併到您的類中。你必須看看Inverted做什麼,看看你爲什麼想這樣做。

+0

謝謝你糾正我的錯誤:) – frickskit