假设我有以下内容
struct X {
typeA_t A;
typeB_t B;
...
typeZ_t Z; // Where some of these are Unions
void do_something(){
A.do_something();
B.do_something();
...
Z.do_something();
}
};
对于不同的类A - Z
,是否可以将其缩小到一两行?
如果使用继承,则可以摆脱A-Z
,但不能摆脱行数。
如果您不赞成投票,请说明原因。如果这是C ++的基本问题,那不是很好的理由。
答案 0 :(得分:3)
不确定这是否行得通,但是您可以拥有一个包含26个元素的元组,并将其类型指定为模板参数列表,而不是拥有26个类的元组。然后可以遍历元素:
template <class... T>
struct generic_X {
std::tuple<T...> data;
void do_something() {
do_something_helper(std::index_sequence_for<T...>{});
}
template <size_t... i>
void do_something_helper(std::index_sequence<i...>) {
(std::get<i...>(data).do_something(), ...);
}
};
using X = generic_X<typeA_t, ..., typeZ_t>;