c++ - 重载可变参数模板的固定参数

标签 c++ c++14 variadic-templates variadic-functions

是否可以通过更改函数参数包之前的固定参数数量来覆盖可变参数模板?例如:

#include <iostream>

template <typename ...Args>
void foo(std::string, std::string, std::string, Args...) 
{ 
  std::cout << "THREE STRINGS\n"; 
}

template <typename ...Args>
void foo(std::string, std::string, Args...) 
{ 
  std::cout << "TWO STRINGS\n"; 
}

int main() {
  foo("key", "msg", "data", 1);
}

运行它会导致调用第二个 foo,但我希望调用第一个。有没有更好的方法重载这个函数?

最佳答案

选择第二个变体是因为它不涉及为最后一个参数创建 std::string 实例所需的额外转换。如果您显式调用类构造函数(或调整参数以准确获取您传递的内容),那么它将正常工作:

foo(std::string{"key"}, std::string{"msg"}, std::string{"data"}, 1, 2); // THREE STRINGS

online compiler

关于c++ - 重载可变参数模板的固定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48948591/

相关文章:

c++ - 头文件中的 Lambda 错误

c++ - 为什么在 gcc 中允许带有 std::string 的模板化 constexpr?

c++ - 具有两个可变参数的函数

c++ - Clang 自动变量模板错误

c++ - 为什么范围不能用于管道库功能?

c++ - 如何在 C++11 中构建具有在编译时递增值的整数成员的结构序列

c++11 - 将两个可变参数模板合并为一个

c++ - OpenCV:是否可以用它执行 openGL 像素着色?

c++ - 如何在控制台上打印数字为0-99的简单数组

c++ - 是否可以绘制一个 Drawable 并从中获取位图?