通过宏封装实现std::format编译期检查参数数量是否一致

[复制链接]
发表于 2022-9-16 17:22:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
背景

std::format在传参数量少于格式串所需参数数量时,会抛出异常。而在大部分的应用场景下,参数数量不一致提供编译报错更加合适,可以促进我们更早发现问题并进行改正。
最终效果

[code]// 测试输出接口。template void Print(const std::string& _Fmt, const T&... _Args){    cout = '0' && fmt = MAX_ARGS_NUM)                                        {                                                // 当前编号大于最大上限,则直接视为非法格式串                                                return -1;                                        }                                }                        }                        else if (fmt == ':')                        {                                // 遇到冒号,说明接下来是格式串规则,直接跳过                                for (; i + 1 < fmt.size() && fmt[i + 1] != '}'; ++i)                                {                                        ;                                }                        }                        else                        {                                // 解析替换串时,遇上其他字符,均将格式串视为非法。                                return -1;                        }                }                break;                }        }        // 最终状态必须为普通串解析状态。        return state == NORMAL ? nArgsNum : -1;}// 可变参数数量辅助器template std::integral_constant VariableArgsNumHelper(const Args  & ...);// 测试输出接口。template void Print(const std::string& _Fmt, const T&... _Args){        cout
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表