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

问题描述 投票:0回答:1

假设我有以下

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

c++ oop
1个回答
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>;
© www.soinside.com 2019 - 2024. All rights reserved.