用std :: array替换[]

时间:2016-03-10 19:39:04

标签: c++ c++11

有没有办法用VECTOR_TYPE::*memberlist[sizeof...(SCALAR)]替换std::array< ??? >

struct myVec
{
    double x;
    double y;
};

template < typename VECTOR_TYPE, typename SCALAR_TYPE, SCALAR_TYPE VECTOR_TYPE::*...SCALAR >
struct vector_template : VECTOR_TYPE
{
    SCALAR_TYPE & operator[]( size_t inx )
    {
        constexpr SCALAR_TYPE VECTOR_TYPE::*memberlist[sizeof...(SCALAR)]{ SCALAR... };
        return this->*(memberlist[inx]);
    }
};

int main()
{
    vector_template < myVec, double, &myVec::x, &myVec::y > vec;

    vec[0] = 0.0;
    vec[1] = 0.0;

    return 0;
}

1 个答案:

答案 0 :(得分:3)

当然。 T x[N]{args...}可以替换为std::array<T,N> x{args...}。在这种情况下:

constexpr std::array<SCALAR_TYPE VECTOR_TYPE::*, sizeof...(SCALAR) >
    memberlist{{SCALAR...}};

无论哪种方式,在这种情况下都不会有任何区别。