【发布时间】:2021-05-13 23:16:12
【问题描述】:
我想创建一个带有std::span 的isIn 函数。
这是我的尝试:
#include <span>
template <typename T1, typename T2>
bool isIn(const T1& x, std::span<const T2> v)
{
for (const T2& e : v)
if (e == x)
return true;
return false;
}
// this one would work, but I want my function to be generic
/*bool isIn(int x, std::span<const int> v)
{
for (int e : v)
if (e == x)
return true;
return false;
}*/
int main()
{
const int v[] = {1, 2, 3, 4};
isIn(2, v); // I want this, but doesn't compile
//isIn(2, std::span<const int>(v)); // this works fine
}
如你所见,我可以通过这个转换来解决问题:
isIn(2, std::span<const int>(v));
但这很冗长,我想做这样的事情:
isIn(2, v);
有什么方法可以实现吗?
【问题讨论】:
-
isIn<int, int>(2,v);工作了吗? -
你有什么理由首先使用 std::span 吗?没有它,代码将正常工作。 godbolt.org/z/TqEzjn
-
@AdrianMaire 是的
-
@Arpegius 哇,我没想到 ranged for 也适用于 C 数组。谢谢!
-
@tuket 您可以通过其他方式获取参数。