c++ 模板仅适用于某些类型

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

有2种。两者都有运算符“[]”。

如何描述仅用这两种类型调用的函数?

使用 typescrypt 它看起来像:

function func<T extends string|number[]>(arg: T) {
  return arg[0];
}

console.log(func([1]))
c++ templates
1个回答
0
投票

如今,您可能甚至不会将其设为模板并使用重载:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.