有2种。两者都有运算符“[]”。
如何描述仅用这两种类型调用的函数?
使用 typescrypt 它看起来像:
function func<T extends string|number[]>(arg: T) {
return arg[0];
}
console.log(func([1]))
如今,您可能甚至不会将其设为模板并使用重载:
char func(std::string_view arg) {
return arg[0];
}
int func(std::span<const int> arg) {
return arg[0];
}
这确实有效地涵盖了两种不同的类型。 然而,当这个函数看起来像一个应该适用于任何范围的“获取第一个元素”函数时,只支持
std::string_view
和 std::span
感觉有点武断。
更通用的解决方案是编写一个模板,如下所示:
auto func(std::range auto&& r) {
return *std::ranges::begin(r);
}