我想知道是否有任何优雅的方式来做到这一点;
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 ++没有反射,否则可能允许您循环遍历基类类型。
幸运的是,这是一件非常罕见的事情,即使这样,很少有这么多的基础,一些重复的线是一个问题。而且,在这里,你还没有提出一个好的案例。