Bonjour,
j'ai un problème de compilation avec des spécialisations template. Je bosse sur un code de dynamique moléculaire et j'ai des espaces en 2 et 3 dimensions. Le probleme, c'est que je n'ai pas les même type pour ma variable de rotation (double en 2D et tinyvector en 3D) et quand je veux compiler mon code en 2D, le compilateur essaie aussi de compiler la version 3D de mon .cpp.
J'aimerais donc savoir si il y a un moyen de contourner le probleme.erreur: no matching function for call to ‘mols::PatchyParticleHybrid<double, 2>::rotate(mols::PatchyParticleHybrid<double, 2>::Position)’
.cpp
.hpp
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 template<int D> void addMonomer(Config& config){} template<> void addMonomer<2>(Config& config) { //autres trucs p.rotate(typename Config::AtomType::positionType (M_PI)); } template<> void addMonomer<3>(Config& config) { //autres trucs p.rotate(typename Config::AtomType::Position (0,0,M_PI)); //<--- probleme ici quand D = 2 }
merci à vous ^^
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 template <typename pType, int D> class Particle : public Atom<pType, D> {}; template <typename pType> class Particle<pType, 2> : public Atom<pType, 2> { typedef pType positionType; inline void rotate(positionType angle) { //des trucs } } template <typename pType> class Particle<pType, 3> : public Atom<pType, 3> { typedef blitz::TinyVector<positionType, 3> Position; inline void rotate(Position angle) { //des trucs } }
Partager