Maison >développement back-end >C++ >Pourquoi ne puis-je pas transmettre une variable non constante comme argument de modèle en C ?
Les arguments du modèle doivent être constants
En C , les arguments du modèle doivent être des expressions constantes, qui sont évaluables lors de la compilation. Cela garantit que le code généré par le modèle est corrigé et optimisé au moment de la compilation.
Pourquoi ne puis-je pas transmettre une variable non constante comme argument de modèle ?
Le La raison pour laquelle vous recevez une erreur lorsque vous essayez de transmettre la variable non constante i comme argument de modèle est que le compilateur ne peut pas évaluer sa valeur au moment de la compilation. Étant donné que la valeur de i n'est connue que lors de l'exécution, elle ne peut pas être utilisée comme paramètre pour la spécialisation des modèles.
Solution alternative pour itérer sur les arguments du modèle
Pour atteindre votre objectif objectif sans changer l’interface API, une approche consiste à utiliser la spécialisation des modèles. Cela implique la création de plusieurs fonctions surchargées spécialisées pour différents arguments de modèle. Dans ce cas, vous définirez des fonctions individuelles modifier<1>, modifier<2>, ..., modifier<10> pour gérer les différentes valeurs d'argument.
Appeler une fonction de modèle avec un argument non constant
Pour appeler la fonction de modification avec un argument non constant, tel que VAR dans votre code, vous pouvez utiliser une macro de préprocesseur ou une fonction d'assistance qui crée et appelle dynamiquement la spécialisation de modèle appropriée. Cependant, cette approche n'est pas la norme C et nécessite de la prudence pour éviter les erreurs de compilation.
Exemple avec spécialisation de modèle
Voici un exemple de solution utilisant la spécialisation de modèle :
<code class="cpp">template<> void modify<1>() { /* ... */ } template<> void modify<2>() { /* ... */ } // ... template<> void modify<10>() { /* ... */ }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!