C'est bête de faire ça au runtime, alors que tu pourrai donner à ton compilateur toutes les informations nécessaire sur ta pile de couche pour qu'il te merge tout ça et te l'optimise au petit oignons, plutôt que de devoir parcourir une liste chaînée qui contient toujours les même valeurs.
Parce que, ce que tu nous décris ressemble fortement à ce que l'on fait en C++ avec du Policy-based_design :
#include <cstdio>template<classLowerLayer>structl1:LowerLayer{unsignedcharval1='a';unsignedcharval2='b';unsignedcharval3='c';unsignedcharstate=0x00;unsignedcharsend(unsignedchar*lower_state_jcomprend_pas_trop){unsignedchartmp=0x00;unsignedcharlower_state;// ... plein de code ...switch(state){case2:// ici je considère que LowerLayer existe forcement,// si ce n'est pas le cas, on pourrai passer une// classe vide du genre NoLowerLayer avec des methodes// vides qui seront éliminée par le compilo, on// pourrai aussi tester avec// if (std::is_same<LowerLayer,NoLowerLayer>::value)// pour savoir s'il y a un niveau en dessous, ou faire// du super SFINAE de ouf. mais bon, KISS.tmp=this->LowerLayer::send(&lower_state);if(lower_state==0xFF)state++;*lower_state_jcomprend_pas_trop=state;returntmp;}// ... encore plein de code ...}};// J'imagine que l2 ne peut être qu'utilisée en couche la plus basse.// Sinon il faudra juste une autre classe 'terminale' du genre NoLowerLayer.structl2{unsignedcharval1='Z';unsignedcharval2='F';unsignedcharstate=0x00;unsignedcharsend(unsignedchar*lower){//...}};// Une couche intermédiaire, parce que je suis pas trop flemmard.template<classLowerLayer>structl1_5:LowerLayer{unsignedcharsend(unsignedchar*lower){unsignedcharlower_state;*lower=0x00;puts("coucou maman");returnthis->LowerLayer::send(&lower_state);}};template<classLayerStack>charsend(LayerStack&stack){unsignedcharres=0x00;stack.send(&res);if(res==0xFF)return0;return1;}intmain(){// définition de mes couches : l1 puis l1,5 puis l2// et instanciation.l1<l1_5<l2>>ma_pile;while(send(ma_pile));return0;}
# Faire ça au runtime ? je préfère faire ça à la compilation.
Posté par Batchyx . En réponse au journal Et Dieu inventa le soutien gorge !. Évalué à 10.
C'est bête de faire ça au runtime, alors que tu pourrai donner à ton compilateur toutes les informations nécessaire sur ta pile de couche pour qu'il te merge tout ça et te l'optimise au petit oignons, plutôt que de devoir parcourir une liste chaînée qui contient toujours les même valeurs.
Parce que, ce que tu nous décris ressemble fortement à ce que l'on fait en C++ avec du Policy-based_design :