考虑以下简单示例
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();
}
};
代替?????
答案 0 :(得分:2)
Stand<Fruits>...
对于Stand<X>
中的每个X
,您需要Fruits
类型的基类,因此展开的模式为Stand<Fruits>
,并由...
扩展对于包中的每个元素。