1

我正在嘗試爲函數使用C++ 11的可變參數模板功能。基本上,我的要求是,我有一個功能,比如一個基類,從基類繼承的可變模板方法的示例

user_defined_function() 

此功能不能在基類中定義,但每當一個開發人員創建一個派生類中,她可能要實現根據此方法滿足她的要求。但是,該方法可能有任何數量的任何類型的參數,並可能返回任何類型。我在想,我可以將這個方法作爲一個可變參數模板,但由於我正在處理該方法的繼承,所以我認爲這很棘手。有人可以舉個例子嗎?以下是我的代碼,但我不確定這是否是正確的方式。

// base.h 
class Base 
{ 
public: 
    template<typename R, typename... arguments> 
    R user_defined_function(arguments... parameters); 
}; 

// derived.h 
class Derived:public Base 
{ 
public: 
    template<int, float, int, double> 
    int user_defined_function(float, int, double); 
}; 

// derived.cc 
int Derived::user_defined_function(float, int, double) 
{/* implementation */ } 
+1

爲什麼在基類中聲明它不能由基類定義?誰會調用這個函數?也許看看CRTP(「奇怪的循環模板模式」),它通過模板爲基類提供對派生成員的訪問。 – Potatoswatter

+0

實際上,基類的類定義了派生類的結構。它更像是一個界面。當某人從這個基類中派生出一個類時,他或她可能需要根據他們的需求來實現這個功能。我把它放在基類中的原因是讓用戶知道他或她可以在派生類中實現哪些功能。調用是在Base類中的另一個方法內完成的,我沒有在上面顯示。 – Sandra

+0

更完整的示例可能會有所幫助。目前還不清楚模板扮演的角色,或者是否需要虛擬功能。但是,確切的一點是,派生類不能專門化基類的成員模板。除了虛擬功能,C++目前缺乏正式的界面規範。這聽起來像你可能正在尋找像提出的「概念」功能,它已被推遲至2017年。與此同時,評論是最好的替代品。 – Potatoswatter

回答

0

好吧,我已經找到了解決我的問題。問題出在我的設計上。我決定不要在基類裏面有

user_defined_function() 

。相反,我創建了另一個單例類,其中我有這種可變模板方法。然後我在上面介紹的基類中實例化了這個類,並公開了這個實例。現在,使用這個對象,我可以從所有派生類中調用可變參數函數。它工作正常。