我正在寻找一种解决方案,如何简化C ++代码。
类中有很多类似的方法,我需要在每个方法中检查JSON中的数据类型。复制+粘贴此块并只更改所需类型(在本例中为“string”)有点笨拙。我的原始和工作代码验证块看起来像这样
if(json_data_incomming.get("value").is<string>()){
__TRACE("argument type OK\n");
} else {
__ERROR("invalid type\n");
_result.rc = ERROR_CODE_INVALID_TYPE;
_req_done(&_result);
return;
}
我的目标是创建一些这样的验证宏:
JSON_CHECK_TYPE(string)
或:
JSON_CHECK_TYPE(<string>)
我试着将concat我的宏定义为:
#define JSON_CHECK_TYPE(TYPE) if(json_data_incomming.get("value").is<##TYPE##>()){\
__TRACE("argument type OK\n");\
} else {\
__ERROR("invalid type\n");\
_result.rc = ERROR_CODE_INVALID_TYPE;\
_req_done(&_result);\
return;\
}
但没有成功 - 编译器返回错误:
错误:粘贴“&lt;”并且“string”不提供有效的预处理标记
我做错了什么?
答案 0 :(得分:2)
这是宏,你正在寻找:
#define JSON_CHECK_TYPE(type) \
do { \
if(json_data_incomming.get("value").is<type>()){ \
__TRACE("argument type OK\n"); \
} else { \
__ERROR("invalid type\n"); \
_result.rc = ERROR_CODE_INVALID_TYPE; \
_req_done(&_result); \
return; \
} \
} while(false)
在此宏中,部分do {
和} while(false)
用于实现此目的:
if(condition)
JSON_CHECK_TYPE(string);
else
// Do other useful things