Ma structure de fichier est ainsi:
file.h (définitions des en-têtes de mes classes et de mes fonctions templates ou non)
file.cpp (implémentations des non-templates)
file.tpp (définition de l'implémentation des templates)
file.ut (tests unitaires avec boost unit)
La librairie se construit ainsi
file.cpp inclus file.h qui inclus en fin de fichier file.tpp
Mon application de test est un gros main qui inclus mes tests unitaires.
file.h:
file.tpp:
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 #ifndef XX_FILE_H #define XX_FILE_H namespace XX { template< typename T > class TotoFile : public boost::noncopyable { public: typename XX::Toto< T >::Example m_Example; const std::string m_Id; TotoFile(const std::string &inId); virtual ~TotoFile(); virtual std::string GetId() = 0; } } #include "XX/file.tpp" #endif // XX_FILE_H
J'utilise bien le cxx flag: -g -O0 pour compiler ma libraire et mon application de test.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template< typename T > XX::TotoFile< T >::TotoFile(const std::string &inId): m_Id(inId) {} template< typename T > XX::TotoFile::TotoFile< T >::~TotoFile() {}
GDB n'arrive pas à accéder au code des template:
Alors tout les exemples qui fonctionnent avec GDB c'est quand les templates sont écrit dans les cpp. Ce qui est, pour rester poli, impossible dans mon cas.In ?? () ()
Cannot find bounds of current function
Et le cas où les gens ont pas de réponse c'est mon cas, le template est inclus en fin de fichier dans le header. Donc je tente ma chance avec vous :p.
Voici ma configuration (Mingw Nuwen):
Essentials:
* binutils 2.28
* GCC 7.1.0
* mingw-w64 5.0.2
Utilities:
* coreutils 8.27 (only sort, uniq, and wc)
* gdb 8.0
* grep 2.10
* LAME 3.99.5
* make 4.2.1
* pngcheck 2.3.0
* pngcrush 1.8.11
* sed 4.4
* vorbis-tools 1.4.0
Partager