J'ai besoin de calculer le produit d'un tas de nombres au moment de la compilation passé à une structure modèle. Je parvins à faire une solution laide :template Métaprogrammation: multiplier un tas d'arguments de template
template<std::size_t n1, std::size_t ...args>
struct mul_all
{
static constexpr std::size_t value = n1 * mul_all<args...>;
};
template<>
struct mul_all<0>
{
static constexpr std::size_t value = 1;
};
Le problème est que chaque fois que je dois nourrir 0 à modèle args à mon struct comme si
int main()
{
std::cout << mul_all<1,2,5,4,5,7,0>::value << " "
<< mul_all<4,2,0>::value;
return 0;
}
est-il une solution de contournement pour lire ce dernier zéro?
note: Je suis un débutant en TMP.
Juste pour voir, voici un C + +14 Solution 'constexpr' qui n'utilise pas la récursivité des modèles: http://melpon.org/wandbox/permlink/yNbfyOhiN3hLqmpA – bogdan
cool !!! est-il possible de la comparer avec l'autre solution? –
Voulez-vous dire en termes de temps de compilation? Les solutions non récursives devraient être à peu près les mêmes, et mieux que les classiques impliquant la récursivité des templates, car les récursives produisent plusieurs instanciations de templates, ce qui coûte quelque chose (en pratique, cela commence à importer pour un nombre relativement important d'arguments template). des dizaines d'entre eux). Cependant, la solution de tableau factice C++ 14 est juste une solution de contournement pour l'absence d'expressions de pli; Je choisirais C++ 17 fois les expressions disponibles. – bogdan