我想使用來自構造函數參數的推斷類型作爲我的類的其餘部分的模板參數。這可能嗎?C++ - 從構造函數中使用推斷的模板參數作爲模板參數throughtout類
事情是這樣的:
class AnyClass
{
public:
template<Class C>
AnyClass(C *c) {
//class C is inferred by constructor argument
}
// constructor argument is used as argument in other template types
nestclass<C> myNestedClass;
void randomfunction(C *randonarg) {
}
}
詳情:
事情是這樣的。我試圖初始化我的基類型給定繼承類的類型。在下面的情況下,DerivedA繼承自Base,但是DerivedB繼承自DerivedA,因此,從我所瞭解的Base的構造函數(在DerivedA中找到)中的值this
實際上將是指向DerivedB的指針,因此Base
中的推斷類型將是類型DerivedB。不過,我想在我的基類的其餘部分使用這種類型,而不僅僅限於構造函數。
class Base {
// type T derived from inheriting class
template<T>
Base(T *) {};
//like to use other places
void randomfunction(T *arg1) {
//does something with type T
};
}
class DerivedA : publicBase {
DerivedA() : Base(this) { //this should be a pointer to DerivedB, since it is inherited
//from DerivedB.
}
}
class DerivedB : class DerivedA {
//anything
}
**我的主要目標是在我的基類中使用繼承類類型。我意識到這是一個不同的qst,但我認爲我的解決方案會在我原來的問題中找到。
我在考慮使用中介方法(類似於下面提出的功能),但不知道它是否可行。
感謝您的幫助!
不,我給出了下面相關問題的答案,但您可以更詳細地描述您的使用案例,並可能解決您遇到的實際問題! – Yakk 2013-04-07 16:32:08
也許你想看看[CRTP](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)(奇怪的循環模板模式)? – dyp 2013-04-07 17:02:16
是的,CRTP是正確的做法。如果您需要一個到父級的單一二進制接口,請執行兩階段CRTP,接口類和CRTP實施基礎,然後派生。 – Yakk 2013-04-07 18:59:04