من منظور سوالتون رو نفهمیدم اما اگه اینه که میخواین هرچی اکسکپشن رخ میده کنترل کنین یه سورس کوچیک!! نوشتم ببینین بدردتون میخوره !!!
کل برنامتون رو در بلاک try قرار بدین اما توجه داشته باشین که اگه بخواین از پرتابه استفاده کنین مثالشو زدم اما کامنته توی آرگومان تابع retExc هر چی رو که میخواین پرتاب کنین بنویسین حالا چه استرینگ چه عدد چه کاراکتر چه .... به مثال هایی که زدم توجه نمایید
اگه هم جایی توی فهم کد مشکل داشتین بپرسین تا براتون توضیح
#include <iostream>
#include <exception>
#include <typeinfo>
#include <stdexcept>
#include <sstream>
using namespace std;
ostringstream strexc;
template <class Fire360Boy>
Fire360Boy retExc(Fire360Boy exc){
return exc;
}
int main()
{
bool f=0;
long double *ptr[50];
try{
// strexc << retExc(525);
// OR
// strexc << retExc("Error Divide");
// OR
// strexc << retExc(anything);
// throw strexc.str();
for(int i=0;i<50;i++){
ptr[i]=new long double[9849841];
cout << "alloc " << i << endl;
}
}
catch(string e){
cerr << e << endl;
f=1;
}
catch(...){
auto p = current_exception();
strexc <<p.__cxa_exception_type()->name();
string temp = strexc.str();
temp=temp.substr(3,temp.length()-3);
temp = "Trap Error : " + temp;
cerr <<(p ? temp : "Trap Error but khataye sare Kari!!! khatayi vojood nadarad") << endl;
f=1;
}
return f;
}
Fire360Boy
Always & Everywhere