2

isInを取る関数を作りたかったのstd::spanです。

これは私の試みです:

#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);

達成できる方法はありますか?

https://godbolt.org/z/czTs83

4

4 に答える 4