c++ - 是否可以将可变参数模板参数传递给 va_list?
问题描述
Is it possible to pass va list to variadic template的镜像问题
在我的测试项目中,有一个功能:
void Func(LPCSTR format, ...) {
va_list args;
va_start(args, format);
char buffer[256];
vsprintf_s(buffer, 256, format, args);
printf("%s\n", buffer);
va_end(args);
}
我写了一个模板函数:
template<typename... Args>
void FuncTemp(LPCSTR format, Args... args) {
Func(format, args...); //#1
}
Func
第 1 行的调用正确吗?我已经测试了我的程序,它似乎产生了正确的结果。这样写有问题或陷阱吗?
这背后的逻辑:我想实现一个日志写入类,它可以决定将日志写入本地位置或提交到服务器:
Class LogWriting{
public:
...
LogTypes mLogType;
void WriteLogs(...){
switch (mlogType) {
case(LogTypes::local): {
// need to call <void LogLocal(LPCSTR format, ...)> here
// which CANNOT be changed.
break;
}
case(LogTypes::online): {
// need to call
/* template<typename... Args>
void LogOnline(LPCSTR format, Args... args)
{
std::string strFormat = std::string(format);
std::string logMessage = fmt::sprintf(strFormat, args...);
reportLog(logMessage);
}
*/
// which CANNOT be changed.
break;
}
...
}
};
因为我不能改变LogLocal()
and的参数类型LogOnline()
(一个是va_list,另一个是可变参数模板),我决定设置WriteLogs()
为可变参数函数模板来适应这两个函数:
template<typename... Args>
void WriteLogs(LPCSTR format, Args... args)
解决方案
推荐阅读
- python - 为什么我提示说scrapy中@class的语法无效?
- python - 从带有符号字符的字符串换行中提取整数的有效方法是什么?
- pip - windows Pycharm项目解释器没什么可显示的
- r - 无法在 R studio 中分配 2.8Gb 错误的向量
- c++ - 递归中的段错误,当尝试在 C++ 中的数独求解器算法中回溯时
- python - 合并/分组类实例
- android - Android Studio 4.0 未显示构建错误详细信息
- linux - $MKLROOT 未定义(Ubuntu)
- reactjs - 如何在 react-google-maps reactjs 中更改 infoWindow 样式
- python - Django:Pipfile.lock 依赖安装问题