我想包裝C API函數在某些情況下返回int
和其他指向宏,將檢查條件並提供診斷和拋出異常的情況下出現錯誤。對於返回int
功能很簡單,因爲我不需要那麼int
:包裝C API函數返回指針到宏調用
#define CALL_INT(name, ...) do { \
if(!name(__VA_ARGS__)) throw std::runtime_error(#name " failed");
} while(0)
// using it
CALL_INT(foo, arg);
但返回指針它不是那麼簡單,因爲我需要檢查指針對nullptr
,然後將其分配給我的指針功能。那麼,是否可以編寫類似的宏,所以這個表達式將工作:
auto ptr = CALL_PTR(foobar, arg1, arg2);
即它會產生代碼,調用foobar(arg1, arg2)
檢查結果對nullptr
,使之可用於分配的,如果沒有錯誤發生。
爲什麼你這樣做而不是製作模板包裝? – krzaq
@krzaq模板包裝不能串函數名稱 – Slava
只使用宏將函數名稱傳遞給模板包裝的解決方案是否令您滿意? – krzaq