簡體   English   中英

使用 c++ 中的模板在派生的 class 中調用父 class 的構造函數的正確語法是什么?

[英]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;   
            }

Godbolt 上的示例

請注意,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM