gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 22:34:58 33 4
gpt4 key购买 nike

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

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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com