Variadic类模板,多重继承和模板解包

时间:2018-04-05 11:07:31

标签: c++11 variadic-templates

考虑以下简单示例

struct Banana{

};
struct Apple{

};
struct Watermelon{

};


template<typename Fruit>
struct Stand {
protected:
    Fruit& get();
private:
    Fruit fruit_;
};


template<typename... Stands>
struct TownFairStands : private Stands... {
    template<typename Fruit>
    Fruit& get() {
        return Stand<Fruit>::get();
    }
};

int main(){
    TownFairStand<Banana, Apple, Watermelon> stand;
    TownFairStands<Stand<Banana>, Stand<Apple>, Stand<Watermelon>> stand2;
    return 0;
}

定义TownFairStand的丑陋方式是使用stands2定义的方式。但是我希望选择使用stand定义的清洁界面。

但是我仍然试图弄清楚如何创建这个界面

template<typename... Fruits>
struct TownFairStand : private ??????{

    template<typename Fruit>
    Fruit& get(){
        return Stand<Fruit>::get();
    }


};

代替?????

的内容

1 个答案:

答案 0 :(得分:2)

Stand<Fruits>...

对于Stand<X>中的每个X,您需要Fruits类型的基类,因此展开的模式为Stand<Fruits>,并由...扩展对于包中的每个元素。