捕获模板类内部定义的异常的语法
Syntax for catching exception defined inside template class
我在网上找不到这个,这是一个非常愚蠢的问题(只是关于语法):
我有以下代码
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++不能以这种方式工作。
相关文章:
- C++ 中的自定义异常:在哪里定义它们?
- 我应该C++自定义异常代码放在哪里?
- 自定义异常中的用户定义的空构造函数,具有多个继承和抽象基类
- 处理许多自定义异常的最佳方法是什么
- C++未显示自定义异常消息
- 自定义异常中的消息已损坏
- 为什么要创建自己的自定义异常类
- 定义异常类
- C++ 构造函数中的自定义异常抛出 ()
- JNI自定义异常具有多个参数
- 如何在抛出未处理的自定义异常后调用 what()?
- 无法创建两个从 std::logic_error 继承的自定义异常类
- 引发异常并直接结束程序的自定义异常处理
- 在C++中创建自定义异常
- G++ 自定义异常处理程序
- 自定义异常并不总是执行 what()
- 从boost::exception和std::runtime_error继承自定义异常类
- 添加到方法的 C++ 自定义异常会出错
- 在自定义异常中仍可访问(误报?
- 自定义异常类 C++