Бьерн Страуструп.
Язык программирования С++
238
//
...
}
Конструкция в
скобках после служебного слова catch является по сути описанием и она аналогична
описанию формального параметра функции. В ней указывается каким может быть тип параметра (т.е.
особой ситуации) и может задаваться имя для фактической, т.е. запущенной, особой ситуации.
Вспомним, что в шаблонах типов у нас был выбор для именования особых ситуаций. В
каждом
созданном по шаблону классе был свой класс особой ситуации:
template
class Allocator {
//
...
class Exhausted { }
//
...
T*
get();
};
void f(Allocator& ai, Allocator& ad)
{
try
{
//
...
}
catch (Allocator::Exhausted) {
//
...
}
catch (Allocator::Exhausted) {
//
...
}
}
С другой стороны, особая ситуация может быть общей для всех созданных по шаблону классов:
class Allocator_Exhausted { };
template class Allocator {
//
...
T*
get();
};
void f(Allocator& ai, Allocator& ad)
{
try
{
//
...
}
catch (Allocator_Exhausted) {
//
...
}
}
Какой способ задания особой ситуации предпочтительней, сказать трудно. Выбор зависит от
назначения рассматриваемого шаблона.
Достарыңызбен бөлісу: