我想重载(或专门化)一个可变参数函数,以便重载(或专门化)仅接受特定类型的参数。在 C++20 中我会写:
#include <type_traits>
#include <iostream>
// original version
void foo(auto const&...) { std::cout << "default\n"; }
// oveload/specialization takes only Bar instances
struct Bar {};
void foo(std::same_as<Bar> auto const&...){ std::cout << "Bar\n"; }
代码按预期工作。如果参数都是
Bar
,则选择第二个版本,否则选择第一个版本。我将如何使用 C++17 创建第二个重载?理想情况下,我不必修改更通用的版本。
这是使用
std::enable_if
的第一次失败尝试:https://godbolt.org/z/9vn39jTd4