2012-03-21 12 views
6

このコードに遭遇し、それが何を意味しているのか不思議でした。 しかし、それを見てから約15分後でさえ、私にとって意味をなさない。タイプが明確でないタイプ

template< typename T > 
struct Vector4 { 
    typedef T Vector4<T>::* const vec[4]; 
    static const vec constVec; 

    //just to have some member instances of T 
    T member1, member2, member3, member4; 
}; 

のでconstVecの種類は何ですか? typedefを繰り返すだけでなく、共通言語で説明してください。

マイノートこれまで:

  • なぜ2種類(TVector4<T>)がありますが、これは関数ポインタのですか?
  • :: *は何を意味しますか? Vector4の範囲からすべてを取る?
  • constポインタ配列ですか?しかし、なぜ::なぜですか?
+3

http://www.gamedev.net/topic/261920-a-slick-trick-in-c/ –

+0

@EddyPronk:ニースの場所を知りますその人は^^からそれを取得します。私の情報源はそこからではありませんでしたが(しかし、一見ひどくインスパイアされています) – Nobody

答えて

10

constVecタイプのT

注あるVector4<T>クラスのメンバーに4つの定数ポインタの配列である:メンバーが一定ではなく、ポインタ自体があります。

最初は、これらは定数ポインタなので、コンストラクタで初期化する必要があります(ちょうどstatic修飾子に気づいたため、クラス外で初期化する必要がありますが、 「初期化リストであることを行う必要がありますD)

template< typename T > 
struct Vector4 { 
    typedef T Vector4<T>::* const vec[4]; 
    static const vec constVec; 

    //just to have some member instances of T 
    T member1, member2, member3, member4; 

}; 

template<typename T> 
const typename Vector4<T>::vec Vector4<T>::constVec = {&Vector4::member1,&Vector4::member2,&Vector4::member3,&Vector4::member4}; 

int main() { 
    Vector4<int> v; 
    for(int i=0; i<4; i++) { 
     (v.*Vector4<int>::constVec[i]) = 5; 
    } 
return 0; 
} 
+0

私は私の質問にT型のメンバーを1人追加しました。いくつかのコードを追加して、メンバーと一緒に「vec」の使用法を示してもらえますか? – Nobody

+0

したがって、この例の道徳は、あなたがメンバーを反復できることです。 – enobayram

+0

+1とてもいいです。説明と例をありがとうございました。 – Nobody

関連する問題