我的代码包含如下片段:
std::va_list ap;
va_start(ap, msgfmt);
snprintf_buf buf;
const tchar * msg = buf.print_va_list(msgfmt, ap);
va_end(ap);
它们很短,va_start()
而且va_end()
靠得很近,所以它们不是什么大问题。两者之间的调用异常可能是一个问题(或不是?)。
简单的测试表明,va_start()
不允许从没有省略号的函数中调用。va_end()
是否从不同的函数调用而不是va_start()
从允许的调用?
基本上,我很好奇是否可以对这些调用使用 SBRM/RAII 习语,即使必须va_start()
手动调用然后将实例传递std::va_list
给我的 RAII/SBRM 保护实例?