c++ - 如何调用所有基类的析构函数? (或一个共同的功能)

标签 c++ templates derived-class

我想知道是否有任何优雅的方法可以做到这一点;

template<typename tType>
class A
{
   ...
};

class B : A<type1>, A<type2>, A<type3> ...
{
public:
  void CallBaseDestructors()
  {
    A<type1>::~A();
    A<type2>::~A();
    A<type3>::~A();
    ...

    //Or Something like that...

    A<type1>::DoSomething();
    A<type2>::DoSomething();
    A<type3>::DoSomething();
    ...
  }
};

它不必是析构函数。这也可以,如果像 A<>::Foo() 这样的函数可以从 B 调用,但不是每个碱基的额外调用(代码行)(循环正常)。

最佳答案

首先,您不应该像那样手动调用基类析构函数。调用析构函数是为了“硬核”工作而放置新的;你的例子是一个错误,因为你最终会“两次”破坏东西并且你的程序有未定义的行为。

关于问题的关键:如何对所有基重复一些给定的函数调用,而不是将它们全部写出来?恐怕你不能(除非你从参数包继承)。 C++ 没有反射,否则它可能允许您遍历基类类型。

幸运的是,想要做的事情很少见,即使这样也很少有如此多的碱基以至于一些重复的行成为问题。而且,这里您还没有提出一个很好的案例。

关于c++ - 如何调用所有基类的析构函数? (或一个共同的功能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55871131/

相关文章:

c++ - map 上 max_element 的模板函数需要知道这两种类型

javascript - Jade + express : Iterating over object in inline JS code (client-side)?

C++14:如何按模板参数对可变输入进行分组?

c++ - 指向函数成员的指针 : what does `R(*C::*)(Args...)` mean?

c++ - 在没有限定的情况下从类内的枚举解析名称

c++ - QT - 将文件复制到 AppData

c++ - 如何实现一个继承自fstream的类

c++ - 多态性和派生类

c# - 包含多个派生对象的列表。如何访问派生中的字段

c++ - 比较字符串的瓶颈