Bonjour.

J'apprends le concept de Template, dans le but de simplifier mon code et d'utiliser une class template pour gérer de la même façon différents types d'objets ( il me semble bien que cela peut servir a ca ).

Cependant, quand je tape ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
 
 
template < typename T >
class OBJECT_Template
{
 
public :
 
    OBJECT_Template () {}
    ~OBJECT_Template () {}
 
    template < typename Ti > void                           setObject ( Ti &target )
    {
        std::unique_ptr < T > model ( new T ( target ));
        _template_vector.push_back ( std::move ( model ) ) ;
    }
 
    void                                                    update ()
    {
 
        for (  std::vector < std::unique_ptr < T > > :: iterator it = _template_vector.begin() ; it != _template_vector.end() ; it ++ )
        {
            ( *it ) -> update() ;
        }
    }
 
private :
 
    std::vector < std::unique_ptr < T > >                   _template_vector ;
};
il me dit ceci :

"error:need ' typename ' before ' std::vector < std::unique_ptr < T > > :: iterator ' because ' std::vector < std::unique_ptr < T > > ' is a dependent scope.

Qu'a cela ne tienne, je rajoute ( bêtement ) typename devant vector :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 
        for ( typename std::vector < std::unique_ptr < T > > :: iterator it = _template_vector.begin() ; it != _template_vector.end() ; it ++ )
        {
            ( *it ) -> update() ;
        }
et en effet, ca compile, et le programme fonctionne.

Mais la fonction update de mon objet n'opère pas.

Savez vous d'où cela pourrait provenir ?

Merci si vous pouvez m'aider