2016-03-10 100 views
2

有沒有辦法用std::array<???>代替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; 
} 

回答

2

當然。 T x[N]{args...}可以替換爲std::array<T,N> x{args...}。在這種情況下:

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

無論哪種方式,在這種情況下不會有任何區別。