我試圖弄清楚如何為類提供任意模板引數,然后讓該類使用這些引數中的每一個來實體化一個低音類。這些方面的東西:
template<class T>
SingleParamClass;
template<class ... TYPE_LIST>
MultiParamClass : SingleParamClass<TYPE_LIST[0]>, SingleParamClass<TYPE_LIST[1]>... SingleParamClass<TYPE_LIST[N]>;
我已經將其撰寫為對引數包進行索引,顯然只是出于演示目的。
我知道如何解包型別串列,但不知道如何以我可以像上面那樣使用它的方式解包它。
編輯:
根據要求,我將擴展我正在嘗試做的事情......
我想創建一個使用可變引數模板引數中的型別構造一系列純虛方法的子類。這些純虛方法可供另一個組件呼叫,同時強制開發人員在派生類中實作這些方法。
在一個 C 以我想要的方式神奇地作業的世界里,我會做這樣的事情:
template<class ... TYPE_LIST>
MultiParamClass {
virtual void func(TYPE_LIST[0] arg) = 0;
virtual void func(TYPE_LIST[1] arg) = 0;
...
virtual void func(TYPE_LIST[N] arg) = 0;
}
我不知道如何做到這一點,所以我試圖找到一種使用子類的方法,如下所示:
template<class T>
SingleParamClass {
virtual void func(T arg) = 0;
}
template<class ... TYPE_LIST>
MultiParamClass : SingleParamClass<TYPE_LIST[0]>, SingleParamClass<TYPE_LIST[1]>... SingleParamClass<TYPE_LIST[N]>;
uj5u.com熱心網友回復:
您可以像這樣展開引數包:
template<class T>
struct SingleParamClass {};
template<class ... TYPE_LIST>
struct MultiParamClass : SingleParamClass<TYPE_LIST>... {};
uj5u.com熱心網友回復:
也許嘗試這樣的事情:
template<class T>
class SingleParamClass
{
public:
virtual void func(T arg) = 0;
};
template<class... TYPE_LIST>
class MultiParamClass : public SingleParamClass<TYPE_LIST>...
{
};
class MyMultiParamClass : public MultiParamClass<int, double, string>
{
public:
void func(int arg) override { ... }
void func(double arg) override { ... }
void func(string arg) override { ... }
};
在線演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/447275.html
上一篇:模板模板引數推導與C 類模板
下一篇:輸入裝飾屬性的角度變化檢測
