Моя проблема в том, что у меня есть класс шаблона, и я пытаюсь поймать исключения из разных типов данных (int, float, long, char и т. Д.).C++, Ловля исключений из разных типов данных
#include <iostream>
using namespace std;
const int MAX = 3;
template<class Type>
class Stack()
{
class Range{};
class Empty{};
class Input{};
//Code here
//Code here
//If Error:
throw Range();
throw Empty();
throw Input();
}
int main()
{
try
{
Stack<int> s1
Stack<float> s2
Stack<long> s3
Stack<char> s4
}
catch(Stack<int>::Range) { //Code }
catch(Stack<float>::Range) { //Code }
catch(Stack<long>::Range) { //Code }
catch(Stack<char>::Range) { //Code }
catch(Stack<int>::Empty) { //Code }
catch(Stack<float>::Empty) { //Code }
catch(Stack<long>::Empty) { //Code }
catch(Stack<char>::Empty) { //Code }
catch(Stack<int>::Input) { //Code }
catch(Stack<float>::Input) { //Code }
catch(Stack<long>::Input) { //Code }
catch(Stack<char>::Input) { //Code }
return 0;
}
Как я могу сделать то же самое в 3 строках? Я пробовал:
template <class Type>
catch(Stack<Type>::Range) { }
Error: Expected 'catch' before '<' token (What's Wrong)
template<class Type>
try { //Code }
catch(Stack<Type>::Range) { }
Error: A template declaration cannot appear at block scope (Definetely Wrong, I Know)
template<class Type>
int main()
{
try
{
//Code
}
catch(Stack<Type>::Range) { }
}
Error: Cannot declare '::main' to be a template (Of course, That's totally wrong.)
Я попытался объявить «Type» во многих местах, хотя я знал, что это было неправильно. Если я не объявляю «Тип», это тоже неправильно. Итак, можно ли мне это сделать?
Заранее спасибо
Ну, это слишком сложно, но это единственное решение моей проблемы ... Причина, по которой я определял исключения как подклассы, - это то, что я узнал об исключениях в этом хорошем. Спасибо –
Может быть, вы должны попытаться создать некоторую оболочку/обработчик, который просто обрабатывал бы исключения? Создал ли он шаблонный класс, с типом исключения и функцией catch в качестве параметров, и просто заставил его косвенно обращаться с вашим кодом? –
Ответ заслуживает +1 за «Но просто глядя на него, я настоятельно рекомендую переписать код, чтобы мне не нужно было его использовать», но это противоречие. –