C ++:对结构中的每个成员执行方法调用的方法

时间:2019-02-04 22:31:34

标签: c++ oop

假设我有以下内容

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 ++的基本问题,那不是很好的理由。

1 个答案:

答案 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>;