C++11 可变类模板、多重继承和模板解包

C++11 可变类模板、多重继承和模板解包,c++11,variadic-templates,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

考虑下面的简单示例

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;
}
什么代替了
???

站着。。。
Stand<Fruits>...
对于
水果
中的每个
X
,您都需要一个
Stand
类型的基类,因此要扩展的模式是
Stand
,对于包中的每个元素,它都会被
..
扩展。

Stand。。。

你想为
水果
中的每个
X
创建一个
Stand
类型的基类,所以要扩展的模式是
Stand
,然后对包中的每个元素扩展
..

Stand…
这么简单,我猜我不知道要搜索什么,谢谢<代码>站…
这么简单,我想我不知道谷歌搜索什么,谢谢!出于好奇,如果展台和展台有不同的构造器呢?我尝试使用TownFairStand的转发vararg构造函数,该构造函数不扩展
水果
包,因此它尝试使用所有
参数…
来构造类型为
Stand
的单一基类,该基类无效(没有此类单一基类)。我想我需要一种“剥离”的方法当我将参数传递给派生类的构造函数时,会使用参数,因为这个类会尝试将参数与每个Stand Yes匹配。现在,您正在将每个参数传递给每个基类。是否有一种干净的方法将它们传递给每个支架,或者我必须实现一组SFINAE帮助结构?出于好奇,如果支架和支架具有不同的构造函数呢?我尝试使用TownFairStand的转发vararg构造函数,该构造函数不扩展
水果
包,因此它尝试使用所有
参数…
来构造类型为
Stand
的单一基类,该基类无效(没有此类单一基类)。我想我需要一种“剥离”的方法当我将参数传递给派生类的构造函数时,会使用参数,因为这个类会尝试将参数与每个Stand Yes匹配。现在你把每个参数传递给每个基类。有没有一种干净的方法把它们传递给每个站,或者我必须实现一堆SFINAE帮助结构?
Stand<Fruits>...