小编Nem*_*emo的帖子

我可以有 const 参数包吗?

好吧所以

为了好玩而开发一个简单的日志系统,遇到了一个有趣的问题。我认为能够写一些类似以下内容的东西会很好:

Log(Info, "Result: {}", value);

给我一个像这样的结果

Result: 45

(此处使用 fmt 的格式样式。)

所以我这样设置函数:

template <typename ...args_t>
void Log(LogLevel Level, const char* Message, args_t&&... Args)
Run Code Online (Sandbox Code Playgroud)

效果很好,没有任何问题。但是,我的想法是,如果函数未修改参数,则应将其标记为 const (用于优化并作为给程序员的注释),所以我尝试了以下方法:

template <typename ...args_t>
void Log(const LogLevel Level, const char* Message, const args_t&&... Args)
Run Code Online (Sandbox Code Playgroud)

这一直给我错误,VS2017给了我

error C2665: 'Log': none of the 4 overloads could convert all the argument types

我只是做错了吗?我不应该担心参数包常量吗?有一个更好的方法吗?有时,这个参数打包业务很难让我理解。

(我花了大约 3 个小时研究这个问题,但在堆栈溢出或整个互联网上找不到任何相关信息,如果这个问题已经在其他地方得到了回答,请原谅我。)

c++ constants variadic-templates c++17

2
推荐指数
1
解决办法
776
查看次数

标签 统计

c++ ×1

c++17 ×1

constants ×1

variadic-templates ×1