概述
因为需要代码美观,我要将所有参数检查的动作封装起来;直接上代码:
头文件:
#define CHECK_PARAMS(params, ...) {if(!checkSpecifiedParams(¶ms, __VA_ARGS__, "va_end"))return LOST_SPECIFIED_PARAM;}
bool checkSpecifiedParams(const PARAMS*, ...);
最后加入参数“va_end”的原因是我无法知道变参何时结束,故而添加结束标记
__VA_ARGS__,这个宏可以取到变参,给c++编译器赞一个!
cpp实现:
bool checkSpecifiedParams(const PARAMS* params, ...)
{
va_list paramList;
va_start(paramList, params);
while(paramList != NULL)
{
char* key = va_arg(paramList, char*);
if(strcmp(key, "va_end") == 0)
break;
if(!params->contains(key))
return false;
}
va_end(paramList);
return true;
}
这里说明一下:
va_start(paramList, params);通过params,取得紧随其后参数的地址
va_end(paramList);将地址置空
使用方式:
CHECK_PARAMS(params, "file_id", "group_id", "history_id");
最后
以上就是可耐短靴为你收集整理的C++变参函数和变参宏的全部内容,希望文章能够帮你解决C++变参函数和变参宏所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复