bonjour à tous, dans le cours de c++ moderne sur Zeste de savoir, la partie sur la programmation modulaire explique qu'il faut déclarer les templates comme ceci:

conteneur_impl.tpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
// Implémentation des fonctions templates.
 
template <typename Collection>
void afficher(Collection const & iterable)
{
    for (auto const & e : iterable)
    {
        std::cout << e << std::endl;
    }
}
conteneur.hpp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef CONTENEUR_HPP
#define CONTENEUR_HPP
 
#include <iostream>
 
template <typename Collection>
void afficher(Collection const & iterable);
 
// A la fin, on rajoute le fichier d'implémentation.
#include "conteneur_impl.tpp"
 
#endif
et le main.cpp:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
 
// Le fichier d'implémentation est lui aussi inclut, du coup.
#include "conteneur.hpp"
 
int main()
{
    std::vector<int> const tableau { 1, 2, 3, 4 };
    afficher(tableau);
    return 0;
}

est-ce que la déclaration du prototype du template dans conteneur.hpp n'est pas inutile?