کنترل کلیه استثناهای برنامه توسط یک تابع - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

کنترل کلیه استثناهای برنامه توسط یک تابع

0 امتیاز
آیا این امکان تو c++ وجود داره که بشه کل استثناهایی که توی برنامه رخ میده ، در یک تابع کنترل کنیم؟
سوال شده آذر 14, 1393  بوسیله ی شاهین (امتیاز 114)   5 21 30

1 پاسخ

0 امتیاز

من منظور سوالتون رو نفهمیدم اما اگه اینه که میخواین هرچی اکسکپشن رخ میده کنترل کنین یه سورس کوچیک!! نوشتم ببینین بدردتون میخوره !!!

کل برنامتون رو در بلاک 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

پاسخ داده شده آذر 22, 1393 بوسیله ی Fire360Boy (امتیاز 2,524)   6 24 43
اگه بخواین کل برنامه هاتون رو توی بلاک ترای قرار بدین اصلا به دلایل معلوم که حوصله ی توضیح نیست عاقلانه نیست و کارایی به طور قابل توجه کاهش پیدا میکنه
...