gpt4 book ai didi

c++ - 通过菜单向下传递异常类型

转载 作者:行者123 更新时间:2023-11-28 08:31:30 26 4
gpt4 key购买 nike

所以我遇到了这个问题,但我似乎无法解决它。

基本上我有一个测试菜单,它可以是任意深度,它只是一种组织测试的方式,并且在最低级别有特定的测试用例。

就目前而言,一切似乎都正常,但我想实现一个系统,您可以在其中指定异常类型并根据是否抛出异常来采取行动。更复杂的是,由于我们使用的一些宏,catch block 只接受类型,而不是实例(我相信普通的 catch 可以,已经有一段时间了)。

下面是一些代码:

添加测试:

Menu* mainmenu = new Menu("MainMenu");
Menu* sub1 = mainmenu->add("Sub1", functionptr);
sub1->add("Test1", "Script_to_Drive_Test");
sub1->add("Test2", "Script_to_Drive_Test");
sub1->add("Test3", "Script_to_Drive_Test");

我想要的是能够像这样指定一个异常:

....
sub1->add<SOME::EXCEPTION1>("Test1", "Script_to_Drive_Test");
sub1->add<SOME::EXCEPTION2>("Test2", "Script_to_Drive_Test");
sub1->add<SOME::EXCEPTION3>("Test3", "Script_to_Drive_Test");

问题是有多个异常需要测试,(我相信)这会创建不同的类型。目前,当调用 add 时,所有内容都干净地存储在 vector 中,但是不再可能使用模板(即使我也将 vector 类型模板化,在创建第一个异常后它不会工作,因为 Test2 和 Test3 是不同类型的,对吧?)。实际上,有大量不同的异常需要测试。

所以我遇到的核心问题是能够将这些异常类型放入我的菜单中。完全重写并非不可能(这是一个相对较小的系统),但我真的不想这样做。

任何见解/帮助甚至问题都将不胜感激。我非常乐意澄清任何事情。

最佳答案

我不确定我是否理解你的问题。

但是据我了解,您的问题是现在 add 根据指定的异常类型创建了一个对象,因此您不能将其存储在内部 vector 中。您可能会尝试使用公共(public)基类。让vector 存储指向非模板基类的指针,而每个add 将创建派生模板类的对象(模板取决于传递给 的异常类型添加).

一般来说,以前对存储在 vector 中的对象执行的所有操作现在都将是在派生模板类中实现的基类上的虚函数。

关于c++ - 通过菜单向下传递异常类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1799664/

26 4 0