Template Frage (Zugriff auf Klassenelemente)
-
Hallo,
ich habe eine Funktion, die wie folgt aussieht:
class Foo{ private: vector<Object> m_vectorObjects; // [...] public: const int getValueXById( const int &iId ) const { if( iId >= m_vectorObjects.size() ) return 0; return m_vectorObjects[iId]->getValueX(); } }
nun möchte ich daraus ein Funktionstemplate bauen, daher dachte ich an:
template <typname T> const int getValueById( const int &iId ) const { if( iId >= m_vectorObjects.size() ) return 0; return m_vectorObjects[iId]->T( iId ); }
Aufrufen würde ich das ganze wie folgt:
class Foo{ private: vector<Object> m_vectorObjects; // [...] public: const int getValueXById( const int &iId ) const { return getValueById<&Object::getValueX>( iId ); } }
Nun bin ich mir aber nichtmal sicher, ob sowas überhaupt geht:
1.) Kann eine Funktionstemplate auf private Klassenvariablen zugreifen,
wenn das Template in der selbigen Klasse benutzt wird?2.) Ist es "normal" das man eine art Wraper um ein Funktionstemplate legt, oder kann ich das auch irgendwie geschickter machen?
3.) Ist der Funktionspointer richtig übergeben?
4.) Kann eine Funktionstemplate überhaupt als const deklariert werden?
-
template<class T> class Foo { private: vector<T> mvector; public: const T GetValueByID(const int x) const; }; template<class T> const T Foo<T>::GetValueByID(const int x) const { //... };
So ungefähr müsste es gehen, denke ich...
-
hmm, das macht was, glaube ich, komplett anders:)
ich will ja nicht das object im vector returnen, sondern ein value was im object gespeichert ist.