Bonjour à tous,
J'ai besoin de vos lumières. Je dispose d'une fonction template que j'utilise dans la boucle suivante :
Toutefois, lorsque je tente de compiler ce code, j'obtiens l'erreur suivante :
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 template <std::size_t SIZE> bool AABB<SIZE>::Intersection (const RayPacket<SIZE> & rayPacket_) const { Packet<SIZE, float> nearDist (0.0f); Packet<SIZE, float> farDist (std::numeric_limits<float>::infinity()); for (i = 0 ; i != 3 ; ++i) { const Packet<SIZE, float> & org = rayPacket_.origin.GetPacket<i>(); const Packet<SIZE, float> & invDir = rayPacket_.invDirection.GetPacket<i>(); Packet<SIZE, float> t0 = (min.GetPacket<i>() - org) * invDir; Packet<SIZE, float> t1 = (max.GetPacket<i>() - org) * invDir; nearDist = Max (nearDist, Min (t0, t1)); farDist = Min (farDist, Max (t0, t1)); } return (nearDist[0] < farDist[0]); }
Dans ce cas ce n'est pas très compliqué, je n'ai qu'à itérer 3 fois et donc je peux facilement dérouler la boucle, mais pour autant, je ne comprends pas pourquoi le compilateur gueule. J'aurais compris sur la condition avait été une variable, mais ici c'est une constante (le 3). Pourquoi le compilateur ne peut-il pas automatiquement "dérouler" la fonction pour moi, étant donné qu'il connait à la compilation le nombre de fois qu'il va itérer...error C2975: 'SIZE2' : invalid template argument for 'Vec3f<SIZE>::GetPacket', expected compile-time constant expression
Merci :p
Partager