我想知道是否有任何优雅的方法可以做到这一点;
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/