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

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

我想知道是否有任何优雅的方式来做到这一点;

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++ templates derived-class
1个回答
4
投票

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

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

幸运的是,这是一件非常罕见的事情,即使这样,很少有这么多的基础,一些重复的线是一个问题。而且,在这里,你还没有提出一个好的案例。

© www.soinside.com 2019 - 2024. All rights reserved.