假设我有以下
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 ++的一个基本问题,这不是一个很好的理由。
不知道这是否会工作,但的,而不是你的类的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>;