实现接受索引数组

时间:2017-12-28 10:51:54

标签: c++ arrays templates variadic-templates c++17

这是我的问题Implement STL functions in variadic template的延续:

如果已经定义了"单层"那么如何为接受长度为N的数组的N - 维数组实现下标运算符。下标运算符用作array[indx0][indx1]…[indxN]。我觉得应该有一个简单的折叠表达式吗?

2 个答案:

答案 0 :(得分:1)

因此,fixed不是可折叠运算符之一。游民。但是,我们只需要作弊并捎带另一个:)

[]

See it live on Coliru

答案 1 :(得分:0)

因为它是C ++ 17,所以如果要使其更简单,可以使用constexpr:

template<size_t Idx0, size_t... IdxRest, typename V>
decltype(auto) getval(const V& v)
{
    if constexpr (sizeof...(IdxRest) == 0)
    {
        return v[Idx0];
    }
    else
    {
        return getval<IdxRest...>(v[Idx0]);
    }
}

int main()
{
    int arr[10][10] = { 1,2,3 };
    std::vector<int> arr2 = { 1,2,3 };
    auto v1 = getval<0, 2>(arr);
    auto v2 = getval<1>(arr2);
    return 0;
}