是否可以通过更改函数参数包之前的固定参数数量来覆盖可变参数模板?例如:
#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
关于c++ - 重载可变参数模板的固定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48948591/