是否可以将可变参数模板参数传递给 va_list?

时间:2021-02-25 10:43:23

标签: c++ templates

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
}

第 1 行对 Func 的调用正确吗?我已经测试了我的程序,它似乎产生了正确的结果。这样写有没有问题或陷阱?


这背后的逻辑: 我想实现一个日志写入类,可以决定将日志写入本地位置或提交到服务器:

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()LogOnline()的参数类型(一个是va_list,另一个是可变参数模板),我决定将WriteLogs()设置为可变参数函数模板以适应这两个函数:

template<typename... Args>
void WriteLogs(LPCSTR format, Args... args)

0 个答案:

没有答案
相关问题