使用 C++17 重载单个特定类型的可变参数函数

问题描述 投票:0回答:1

我想重载(或专门化)一个可变参数函数,以便重载(或专门化)仅接受特定类型的参数。在 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

c++ c++17 c++20 variadic-templates
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.