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>...