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

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

最佳答案

不确定这是否可行,但您可以拥有一个包含 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/

相关文章:

c# - 使用秒表对应用程序使用情况进行基准测试

javascript - Angular 工厂自引用

c++ - MakeFile 中的 "undefined reference to"

c++ - 使用隐式转换从字符串流插入

c++ - 在 C++ 中使用 tinyxml2 读取 xml 文件

OOP-如何在ReasonML中创建一个类

c++ - 相比之下,vector.size() 的工作出乎意料

c++ - 尝试使用 Powershell 和 MinGW MSYS 在 Windows 上编译登山扣。在 pthreads_rwlock_t 中出现 gflags 错误

python - super 构造函数使用 *args 和 **kwargs 进行 __init__

java - 如何实现对象访问其他类对象的思想?