C++异常语法
C++ Exception syntax
我很难理解异常的语法。我有一个类模板map<T>
,它必须能够抛出异常。下面的代码是正确的,用于捕获异常。
try
{
map<int> m;
m["everything"] = 42;
}
catch(map<int>::Uninitialized&)
{
cout << "Uninitialized map element!" << endl;
}
我试图创建一个从runtime_error派生的类,然后从我的类中抛出它。但我的逻辑似乎有缺陷。
class Uninitialized : public runtime_error
{
public:
Uninitialized() : runtime_error("error") {}
};
T operator[] (const char index[]) const
{
throw Uninitialized();
return value;
}
你尝试做什么的基本想法当然是可能的,所以你遇到的确切问题还不完全清楚。
这里有一个快速的演示,它确实有效,大致做了你想要尝试的事情:
#include <stdexcept>
#include <iostream>
template <class T>
class map {
public:
class Uninitialized : public std::runtime_error
{
public:
Uninitialized() : runtime_error("error") {}
};
T operator[](const char index[]) const
{
throw Uninitialized();
return T();
}
};
int main(){
map<int> m;
try {
auto foo = m["a"];
}
catch (map<int>::Uninitialized &m) {
std::cerr << "Caught exception:" << m.what()<< "n";
}
}
假设您正在创建一个map
类型(尽管标准库已经提供了一个)。您提供了operator[]
,并希望它在每次有人试图访问不存在的密钥时抛出异常。
创建您的异常类:
class unititialized_access : public std::runtime_error
{
// typical stuff
};
然后,在map<Key, Value>::operator[]
:中
if (<key doesn't exist>)
throw unititialized_error("blah blah");
您可以通过以下方式捕获异常:
try
{
m["foo"] = 42;
}
catch (const unitialized_error& e)
{
// do something
}
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 处理多个异常集合的C++方法
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- 我在c++代码中生成了一个运行时#3异常
- QMetaObject invokeMethod的基于函数指针的语法
- 关于异常继承中的语法的问题
- C++异常类扩展语法
- C++ 实例化派生类的语法异常
- C++异常语法
- 此C 异常语法有什么问题(std :: runtime_error)
- 捕获模板类内部定义的异常的语法
- 异常处理语法问题简单
- 使用Boost Spirit解析语法的未处理异常
- c++中异常的规则和语法
- 抛出c++语法中的异常
- C2061:语法错误:标识符'string' - 行为异常
- 在 catch 块异常中无意义地使用引用传递语法
- 这个语法是什么意思?运算符重载和抛出异常