捕获模板类内部定义的异常的语法

Syntax for catching exception defined inside template class

本文关键字:定义 异常 语法 内部      更新时间:2023-10-16

我在网上找不到这个,这是一个非常愚蠢的问题(只是关于语法):

我有以下代码

tree.h-

#ifndef AVLTree_H_
#define AVLTree_H_
template <class ValueType,class CompareFunction>
class avlTree{
    class avlTreeException{};
public:
    class EmptyTree : public avlTreeException{};
};
#endif /* AVLTree_H_ */

我该如何抓住空树?意思是,我有另一个文件,统计。h-

#ifndef STAT_H_
#define STAT_H_
try{
    //something
}catch(avlTree::EmptyTree&){
    //something
}
#endif /* STAT_H_ */

这里有两个问题。

1) 您必须#include一个头文件,才能拉入该头文件中的声明。

2)

try{
    //something
}catch(avlTree::EmptyTree&){
    //something
}

即使#include d了正确的头文件,这仍然不起作用。它不起作用,原因很简单,这里没有这样的类avlTree::EmptyTree。甚至没有一个类叫做avlTree

avlTree不是一个类。这是一个模板。只有当你实例化一个模板时,比如:

avlTree<int, SomeKindOfComparisonClass>

你有一个类吗?在这种情况下,它被称为avlTree<int, SomeKindOfComparisonClass>;那么您将能够捕获其EmptyTree内部类:

try{
    //something
}catch(avlTree<int, SomeKindOfComparisonClass>::EmptyTree&){
    //something
}

不幸的是,你不能写这样的东西:

try{
    //something
}catch(template<typename ValueType,
                typename ComparisonFunction>
       avlTree<ValueType, ComparisonFunction>::EmptyTree&){
    //something
}

C++不能以这种方式工作。