[英]What is the correct syntax to call the constructor of the parent class in a derived class with templates in c++?
我的 class 需要調用他的父 class 的構造函數。 但是我對此有疑問,因為它們是模板類。
我派生的 class 的代碼如下:
template <class CTHIS, typename T>
class genericalMethodClassWithSeveralInternalParametersClass:public genericalMethodClassWithInternalParameterClass<CTHIS, myNUpleType<T>>
{
protected:
float (CTHIS::*funcVersionWith2Parameters)(float, myNUpleType<T>) const;
public:
genericalMethodClassWithSeveralInternalParametersClass(float (CTHIS::*_funcVersionWith2Parameters)(float, myNUpleType<T>) const, const CTHIS *_thisPar, myNUpleType<T> _fixedParam)
{
funcVersionWith2Parameters = _funcVersionWith2Parameters;
genericalMethodClassWithInternalParameterClass<CTHIS, myNUpleType<T>>::genericalMethodClassWithInternalParameterClass<CTHIS, myNUpleType<T>>(funcVersionWith2Parameters, _thisPar, _fixedParam); // compiler doesn't accept this line
}
};
構造函數的第二行應該調用父 class 的構造函數,但是編譯器不接受它。 我應該在那里放什么?
編輯:我只是在初始化列表中添加了構造函數並且它起作用了:
template <class CTHIS, typename T>
class genericalMethodClassWithSeveralInternalParametersClass:public genericalMethodClassWithInternalParameterClass<CTHIS, myNUpleType<T>>
{
protected:
float (CTHIS::*funcVersionWith2Parameters)(float, myNUpleType<T>) const;
public:
genericalMethodClassWithSeveralInternalParametersClass(float (CTHIS::*_funcVersionWith2Parameters)(float, myNUpleType<T>) const, const CTHIS *_thisPar, myNUpleType<T> _fixedParam):genericalMethodClassWithInternalParameterClass<CTHIS, myNUpleType<T>>(_funcVersionWith2Parameters, _thisPar, _fixedParam)
{
funcVersionWith2Parameters = _funcVersionWith2Parameters;
}
};
不過,對於未來,我想知道如何在派生的 class 代碼中調用父級的構造函數。 實際上,想了一會兒,這個語法問題可能會出現在父 class(不僅僅是構造函數)的任何方法調用中。
您可以調用基本 class 構造函數的唯一位置是在構造函數初始化程序列表中:
genericalMethodClassWithSeveralInternalParametersClass(float (CTHIS::*_funcVersionWith2Paramaters)(float, myNUpleType<T>) const, const CTHIS *_thisPar, myNUpleType<T> _fixedParam)
:genericalMethodClassWithInternalParameterClass<CTHIS, myNUpleType<T>>(&_funcVersionWith2Paramaters, _thisPar, _fixedParam)
{
funcVersionWith2Paramaters = _funcVersionWith2Paramaters;
}
請注意,class 的基礎 class 部分始終必須在 class 本身之前構建。 所以不能先初始化派生的class的成員,然后再對go進行構造基礎。
簡單的方法是為基本類型創建一個 typedef。
using base_type = genericalMethodClassWithInternalParameterClass<CTHIS,
myNUpleType>;
那么構造函數變為:
genericalMethodClassWithSeveralInternalParametersClass(float (CTHIS::*_funcVersionWith2Paramaters)(float, myNUpleType<T>) const, const CTHIS *_thisPar, myNUpleType<T> _fixedParam)
: base_type(&_funcVersionWith2Parameters, _thisPar, _fixedParam),
funcVersionWith2Paramaters (_funcVersionWith2Paramaters)
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.