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

时间:2016-05-14 02:37:48

标签: c++

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

我有以下代码

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_ */

我如何捕捉空树?意思是,我有另一个文件statistics.h -

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

1 个答案:

答案 0 :(得分:1)

这里有两个问题。

1)你必须#include一个头文件,以便在该头文件中引入声明。

2)

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

即使你#include正确的头文件,这仍然无法正常工作。它不会起作用,原因很简单,就是这里没有名为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 ++不会这样做。