C 中可獲得丟擲位置和捕獲位置的異常類

2021-03-31 22:53:42 字數 1385 閱讀 4116

可獲得丟擲異常位置和捕獲異常位置的異常類

聯絡方法:

dyj057@gmail.***

源**:

我覺得c++中使用異常在使用中最大的不方便就是在丟擲異常的時候沒有位置資訊,當程式到一定規模的時候,也很難確定異常從那裡捕獲的,不利於程式的除錯。而在c#中,我發現它的異常的功能太強大了,可以確定異常的位置和捕獲的位置,但它是靠clr的功能實現的。那麼我們怎麼在c++中實現這個功能呢?

下面我就為大家介紹我寫的可以獲得丟擲異常位置和捕獲異常位置的異常類。該類使用標準c++實現,繼承標準異常exception。你也可以按照這個思路實現乙個mfc的版本。我在使用的時候就是使用兩個不同的版本。mfc的版本的功能要強大一點,它內建了win32錯誤**轉換錯誤資訊的轉換函式,為程式提供更強大的異常處理功能。

現在來看看類的定義:

class

more_exception :

public exception

;定義非常的簡單,沒有什麼技巧可言,很容易懂。最重要的是使用了兩個巨集獲得丟擲異常位置的資訊和捕獲異常的位置資訊。

l獲得丟擲異常的位置資訊

#define

throwexception(what) more_exception ex(what, __file__, __function__, __line__); throw ex;

當你需要丟擲異常的時候,使用這個巨集替代一般的方法。

比如:使用

throwexception(

「there is a exception」)

來代替throw ex(「there is a exception」),這樣就可以可以獲得方便的獲得異常的丟擲的位置,當然你可以自己執行巨集裡面的方法。

捕獲異常的時候一定要使用引用來捕獲異常,至於為什麼,請看《more effective c++》的異常部分。

l獲得捕獲異常的位置資訊

#define

setcatchexceptionpos

(more_ex)

more_ex.set_catch_file

(__file__);

more_ex.set_catch_function

( __function__ ); more_ex.set_catch_line(__line__);

這個巨集也很簡單是用來為捕獲到異常新增捕獲異常的位置資訊的。使用方法:

trycatch(more_exception &e)

與c#中的異常模擬較,它少了異常擴散的路徑,甚是遺憾。

注意:源程式在windows xp professional + sp2, visual .*** 2003 環境下編譯通過。

C 中的異常丟擲和捕獲

在 c 語言中,如果發生錯誤,上級函式要進行出錯處理,層層上傳,容易造成過多的出錯處理 並且傳遞的效率比較低下。try catch exceptiontype var include using namespace std void func1 catch double cout catch fun...

C 獲得游標在螢幕中的位置並在位置處輸入指定文字

實現目標 c 獲得游標在螢幕中的位置並在位置處輸入指定文字。實現示例 滑鼠游標定位到winform軟體的任意輸入位置,按f1快捷鍵快速輸入當前時間。實現思路 1 首先監聽f1鍵盤按下事件 2 獲取前台視窗的控制代碼 檢索建立視窗的執行緒資訊 傳送訊息。程式型別 winform 實現過程 首先,定義兩...

C 獲得字串中某個數字的位置

在字串中獲得某數字位置時,可以使用string類的indexof方法,該方法用來確定指定字元在字串中的索引,如果在字串中能找到指定字元,則返回其索引,否則返回 1。在字串中獲得數字位置的關鍵 如下 string str textbox1.text.trim int index str.indexof...