如何有效處理Teamcenter服務器定製中ITK引發的錯誤?Teamcenter |服務器|代碼錯誤處理
在編程語言中,函數通常會返回整數值來表示成功/失敗狀態。零通常被視爲成功,非零被視爲失敗。
在Teamcenter世界中,ITK /函數的返回值通常稱爲ifail。它預計爲零(ITK_ok),如果不是,編碼器應該做些什麼。例如錯誤處理,可用內存,打印信息等等等等。
現在我已經看到很多編寫人員的代碼,他們編寫自定義甚至編寫功能來檢查返回狀態,或者使用宏指定操作符。甚至當我第一次寫我的第一個Teamcenter程序時,我也這麼寫過。
#define ITK(A) {\
iFail = A;\
if (iFail != ITK_ok)\ {\
DO SOMETHING\
}\
}
我定義了一個像這樣的宏,並在任何地方使用它我做了一個函數調用。
ITK(AOM_ask_value_logical(myTag,「attributeName」,& attriubuteValue));它的功能是將每個函數調用的輸出與ITK_ok進行比較並做一些事情。它沒有錯。但大量的事情實際上可能會出錯,而且很難理解。
即使我看到有人這樣做
if(ITK_ok != AOM_ask_value_logical(myTag, "attributeName", &attriubuteValue))
{
// DO SOMETHING
}
int result = ITK_ok
result = AOM_ask_value_logical(myTag, "attributeName", &attriubuteValue);
if(ITK_ok != result)
{
// DO SOMETHING
}
我的意思是,沒有錯的。但它不會增加您的代碼大小?你沒有看到雙重性嗎?
後來我意識到,我們可以用更優雅簡單的方式做到這一點。使用類和重載運算符的C++方法。後來我甚至發現在OOTB Teamcenter中有一些名爲ResultCheck的東西。
所有你需要做的就是包含一個頭文件並使用它的一個類。
#include <base_utils/ResultCheck.hxx>
此文件聲明帶有重載賦值運算符的ResultCheck類。該文件包含在Teamcenter工具包中,您可以查看一下。
它做了一個非常小的&整潔的任務。與此,我的早先的聲明轉換爲下面。
ResultCheck rCheck = ITK_ok;
try
{
rCheck = AOM_ask_value_logical(myTag, "attributeName", &attriubuteValue);
}
catch(const IFail &ex)
{
// DO SOMETHING
}
與每一個函數調用return語句,創建ResultCheck的一個實例。如果您檢查頭文件,您會看到重載賦值運算符將ifail(整數)作爲輸入。它在內部檢查ifail是否爲ITK_ok。如果不是,那麼它只是拋出IFail。控制傳遞給你在catch塊做你想做的任何事情。
簡單是不是?所以現在讓我們刪除所有這些宏,並使用它...
歡迎的StackOverflow!它看起來像你試圖回答你自己的問題 - 請採用本網站的問答形式,並將問題部分作爲具體問題和答案部分作爲答案。 – Filburt
我試圖在stackoverflow中找到它。但我找不到它。然後我找到解決方案。那我該如何發佈呢? – gabehcuod
請使用 - > [編輯] < - 鏈接更新您的問題 - 不要將更新或其他信息作爲單獨的答案發布。本網站不適合您習慣的方式。 – Filburt