gpt4 book ai didi

c++ - VS2013 中的 Variadic 模板解析 - 错误 C3520

转载 作者:行者123 更新时间:2023-11-30 00:50:32 25 4
gpt4 key购买 nike

这段代码有什么问题?

enum LogLevel {
LogLevel_Error = 1,
LogLevel_Warning = 2,
LogLevel_Info = 3,
LogLevel_Debug = 4
};

LogLevel GetLogLevel() {return LogLevel_Debug;};

void Write(const std::string& message) {};

void Write(LogLevel level, std::stringstream& ss) {
if (level > GetLogLevel())
return;
Write(ss.str());
}

template<typename Arg> void Write(LogLevel level, std::stringstream& ss, Arg arg) {
if (level > GetLogLevel())
return;
ss << arg;
Write(ss.str());
}

template<typename First, typename... Rest> void Write(LogLevel level, std::stringstream& ss, First first, Rest... rest) {
if (level > GetLogLevel())
return;
ss << first;
Write(level, ss, rest); // Error C3520, see below
}

Write(std::stringstream(), "Hello", (const char*)" World!", 1);

我试图创建一个用于日志记录的递归/可变参数模板 just as in MSDN ,但我无法摆脱错误 C3520(C3520:“P”:必须在此上下文中扩展参数包。)。是我做错了什么,还是(上帝保佑)编译器错误?

最佳答案

我看到以下问题:

  1. rest需要展开:

    Write(level, ss, rest...);
  2. Write 应该将日志级别作为其第一个参数:

    Write(GetLogLevel(), std::stringstream(), "Hello", (const char*)" World!", 1);
  3. 您不能将临时 std::stringstream 传递给左值引用:

    std::stringstream ss;
    Write(GetLogLevel(), ss, "Hello", (const char*)" World!", 1);

关于c++ - VS2013 中的 Variadic 模板解析 - 错误 C3520,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24683732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com