我有一個關於我最近拿在手中的代碼的問題。我只是想知道,如果在C++模板範例是正確的或有用做以下繼承(只有3類爲例):從模板繼承C++
template< class I, class P, class D, unsigned int ID = 0 >
class PathFilter : public Filter< I, P, 1 >
{
...
}
template< class I, class A, unsigned int N = 1 >
class Filter : public Algorithm< I, A >
{
...
}
template< class I, class A >
class Algorithm : public A //This line
{
...
}
我的問題是關於特別在第三個例子繼承。使它如此「通用」而不精確是否有用?通過更通用的代碼危害可理解的代碼是一個很好的選擇?
我問首先是因爲我沒有C++模板方面的專家,也是因爲我看到這個代碼難於使用模板來理解(通常是模板的名字隻字不提其內容)。有什麼建議?
所以,如果這就是你想要的,很好。至於可讀性,確實,有一個古怪的命名模板參數的傳統 - I,P,A等,但你不必:)。給他們更好的名字,他們可能會變得自我描述。 –
感謝您的回答,但我仍然有一個問題。我理解使用「更高」類中某些功能的一般抽象定義。但模板的主要目標不是泛化參數類型?所以我最後說的是我可以將幾乎所有東西都傳遞給這個更高級的類,並保留一個更低層次的函數。最後,我將擁有一組非常有限的對象,可以繼承(也許是一個)較低級別的功能,我錯了嗎?定義該通用性不是不切實際的方法? –
你說得對。當然,只有一組特定的類「A」適合'算法'最終允許編譯(這些'A'必須以某種方式實現實現由算法<>'指定的接口)。 現在您正在使用模板進行設計。你想要做的就是編寫'算法<>'一次,並且有幾個算法(例如'算法','算法',...)只是寫更多的代碼片段(即類'RungeKutta','' Symplectic' ...)。 不知何故,你仍然是一般的類型。 –
Acorbe