[Template] Template et boucle for
Bonjour à tous,
J'ai besoin de vos lumières :aie:. Je dispose d'une fonction template que j'utilise dans la boucle suivante :
Code:
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]);
} |
Toutefois, lorsque je tente de compiler ce code, j'obtiens l'erreur suivante :
Citation:
error C2975: 'SIZE2' : invalid template argument for 'Vec3f<SIZE>::GetPacket', expected compile-time constant expression
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...
Merci :p