我需要創建一個異常處理,因爲我也問打印像C++ - 有什麼辦法來得到當前執行行
操作的狀態「文件打開:操作成功完成」
「文件關閉:操作成功完成」,
等
是否有這種類似__LINE__,__FUNCTION__,__FILE__
任何宏?
或者是否有任何提升功能可以做到這一點?
我需要創建一個異常處理,因爲我也問打印像C++ - 有什麼辦法來得到當前執行行
操作的狀態「文件打開:操作成功完成」
「文件關閉:操作成功完成」,
等
是否有這種類似__LINE__,__FUNCTION__,__FILE__
任何宏?
或者是否有任何提升功能可以做到這一點?
我認爲答案就是你想要將你正在評估的表達串聯起來?
代碼:
#include <stdexcept>
#include <sstream>
#include <iostream>
void check_result(bool result, const char* file, int line_number, const char* line_contents)
{
if (!result) {
//for example:
std::stringstream ss;
ss << "Failed: " << line_contents << " in " << file << ' ' << line_number;
throw std::runtime_error(ss.str());
}
}
#define CALL_AND_CHECK(expression) check_result((expression), __FILE__, __LINE__, #expression)
bool foobar(bool b) { return b; }
int main()
{
try {
CALL_AND_CHECK(foobar(true));
CALL_AND_CHECK(foobar(false));
} catch (const std::exception& e) {
std::cout << e.what() << '\n';
}
}
棒極了。它完全按照我的預期工作。謝謝。 – prabhakaran 2011-02-26 04:52:54
我不知道你問什麼,但這裏是從我自己的庫中的代碼示例:
/**
* \brief Convenient alias to create an exception.
*/
#define EXCEPTION(type,msg) type((msg), __FUNCTION__, __FILE__, __LINE__)
基本上,這讓我寫:
throw EXCEPTION(InvalidParameterException, "The foo parameter is not valid");
當然這裏,InvalidParameterException
是我設計的一個類,它需要額外的參數來保存函數,文件和創建異常的行。
它具有以下構造:
InvalidParameterException::InvalidParameterException(
const std::string& message,
const std::string& function,
const std::string& file,
int line);
當然,如果你不想拋出異常,而輸出的東西,說一個日誌文件,可以很明顯的使用同樣的「貓膩」。
希望這會有所幫助。
我需要當前行。像pITask-> open()一樣。運行應用程序時,此行必須反映在屏幕上。 – prabhakaran 2011-02-25 08:49:47
@prabhakaran:那麼,你必須告訴我們「當前行」是什麼給你的。 '__LINE__'擴展到寫入的行號。 – ereOn 2011-02-25 08:51:06
兩個__LINE__
和__FILE__
在C++中是可用的,就像在C.唯一需要注意的是,他們的宏,在編譯時展開,因此,如果您在宏或模板,他們堅持他們可能會或可能不會做你期望。
我沒有看到標題和問題的其餘部分之間的關系? – MSalters 2011-02-25 08:46:54
你問關於獲取程序運行的當前行嗎?就像你會在一步一步的調試器中做的一樣? – ereOn 2011-02-25 08:54:09
@ereOn正好。我想在執行時看到每一行(如調試器)。 – prabhakaran 2011-02-25 08:55:24