編譯期自定義錯誤提示

2021-06-25 23:31:09 字數 893 閱讀 6894

是不是常常使用assert?是否對你開發過程帶來了便利?

void fun(tclass * p)

相信這樣的**不會陌生。但是,有沒有想過,這個assert只能用於執行期,而對於編譯期的錯誤就無能為力了。或者,你比較熟悉boost,對於boost_static_assert比較熟悉。有沒有想過怎樣實現編譯期錯誤提示?

當我們寫了錯誤的**,編譯器會給我們提示,錯誤資訊各種各樣。如果我們可以使用編譯器的這種功能,我們人工特意的做出一些功能,讓編譯器來識別,並且,還可以讓編譯器提示出錯。

實現這種功能,可以借助於模板,借助於模板的特化功能。下面來看看loki是如何做的:

首先,宣告乙個模板類:

templatestruct compiletimeerror;
僅僅是宣告,並沒有進行定義。

下面進行特化

template<> struct compiletimeerror{};
這樣,就有了乙個compiletimeerror型別的結構體定義。關鍵的**來了:

#define loki_static_check(expr, msg) \

其中,((expr) != 0返回乙個bool值,這個值在編譯器是可以確定的。如果值為true,那麼順利編譯通過;如果為false,由於我們並沒有定義compiletimeerror結構,編譯器無法找到匹配的型別,編譯無法通過。編譯器錯誤可能如下:error : 'error_test' uses undefined struct 'compiletimeerror<__formal>'。

模板作為c++乙個重要組成部分,在平時開發中用的還很少,以後應該有效的使用起來。

C 自定義編譯期警告和錯誤資訊

transform expression a exp to string format.define aux str exp exp exp transform a exp to string format.define aux str exp aux str exp exp location fi...

自定義滑鼠提示

做本次實驗用的ie6和firefox2.0.0.17 title this is a paragraph move your mouse over the red square.custom tooltip more details can go here.1.元素的title標籤表示的是滑鼠懸停在...

自定義模態提示框

關於android中模態提示框的問題 因為專案最新的效果圖,中提示框為模態的,先前用的toast,雖然可以實現功能,但是提示框後面並沒有模態框那樣的灰色半透明蒙板,現把 給大家參考 customer dialog.xml android orientation horizontal android ...