2017-12-24 21 views
0
class obj1{ 
public: 
    void do(){} 
    void some(){} 
    void stuff(){} 
}; 
class obj2{ 
public: 
    void nowDo(){} 
    void someOther(){} 
    void things(){} 
}; 

template <class T> 
class structure{ 
public: 
    /* 
    access public members of Ts's elements while encapsulating the vector 
    (preferably without copying all of obj's public members in the structure) 
    */ 

private: 
    vector <T *> Ts; 
}; 

void foo(){ 
    structure <obj1 *> str1; 
    structure <obj2 *> str2; 
    /* 
    Access public members of str1 and str2's elements 
    */ 
} 

'構造体'テンプレートクラス内にベクトルをカプセル化しながら、 'obj'要素のパブリックメンバーにアクセスできる手段はありますか?カプセル化されたベクターの要素のpublicメンバーにアクセスするには?

「構造体」を均質化されたテンプレートクラスにしたいので、「構造体」のすべての 'obj'パブリックメンバーをコピーせずに行うことをお勧めします。独自のデータを作成する必要はありません私が含めるすべてのオブジェクトの構造。

+0

あなたは '*'余計なものを持っています。あなたのテンプレートの引数か、ベクトル定義のいずれか。いずれにせよ、あなたの質問は広すぎます。さまざまな場所でメンバーにアクセスする方法はたくさんあります。 – StoryTeller

+0

また、 'struct'は' class'ではありません – Jerfov2

+0

オーバーロードされた 'operator ']'? – Quentin

答えて

0

この点についてはどうですか?

その後
template <class T> 
class structure{ 
public: 

    size_t getCount() 
    { 
     return Ts.size(); 
    } 

    T& getItem(size_t index) 
    { 
     return Ts[index]; 
    } 

private: 
    vector <T> Ts; // notice the change I made here. 
}; 

後のコードで、あなただけのこれを言うことができます。

structure <obj1 *> str1; 
size_t count = str1.getCount(); 
for (size_t i = 0; i < count; i++) 
{ 
    str1->getItem(i)->Do(); 
    str1->getItem(i)->Some(); 
    str1->getItem(i)->Stuff(); 
} 
+0

それは、ありがとう!サンタさんは、あなたのすべてのストッキングを盛り上げるかもしれません。 –

関連する問題