假设我有以下内容
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>;
关于C++:为结构中的每个成员执行方法调用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54525302/