簡體   English   中英

使用可變參數模板模擬多個 inheritance

[英]Using variadic templates to emulate multiple inheritance

我不完全確定這是否可行,或者如果可行的話我需要使用什么語法,但我想制作一個 class 公開派生自可變參數 arguments 中提供的所有類,以便我可以從該單一派生class,從而派生自提供給它的所有類。

我想要做的是聲明如下內容:

class MyClass : public InheritFrom<ClassA, ClassB,  ,,,> {
};

因此 InheritFrom 模板 class 有效地公開派生自所有列出的類。 在我的用例中,提供的每個 class 都有一個默認構造函數,因此不需要調用特殊的構造函數。

我試圖做的是:

template <class A, class ... Args> class InheritFrom : public A, public InheritFrom<Args...> {
...
};

template <class A> class InheritFrom : public A {
...
};

並有效地將本來是多個 inheritance 的東西變成單個 inheritance 層次結構,但編譯器抱怨第二個InheritFrom聲明,它應該是一個專門化,其中只給出一個 class,因為它是一個帶有一個參數的重新聲明。 這些類中的每一個的主體最終都會有更多的細節,但現在我只是想弄清楚如何獲得正確的語法。

在 c++17 你只需要擴展包,僅此而已。

#include<iostream>
#include<type_traits>

template <class ...T> class InheritFrom : public T... {
};

struct Foo {};

struct Bar {};

struct Baz : InheritFrom<Foo, Bar> {};

int main(){
    std::cout << std::is_base_of_v<Foo, Baz> << std::is_base_of_v<Bar, Baz>;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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