J'ai un code qui s'exécute sur un système embarqué et il doit fonctionner très rapidement. Je connais C et les macros, et ce projet particulier est codé principalement en C mais il utilise aussi des modèles C++ [de plus en plus]. Il y a une fonction en ligne:Utilisation de modèles C++ ou de macros pour la génération de la fonction de compilation
inline my_t read_memory(uint32 addr) {
#if (CURRENT_STATE & OPTIMIZE_BITMAP)
return readOptimized(addr);
#else
return MEMORY[addr];
#endif
}
Cette fonction lit de la mémoire d'une manière optimisée ou la mode classique à base de l'état actuel et une image bitmap qui indique si vous souhaitez utiliser l'optimisation dans un état spécifique ou non.
#define STATE_A 0x0001
#define STATE_B 0x0010
#define STATE_C 0x0100
#define STATE_D 0x1000
#define OPTIMIZE_BITMAP 0x1010 // optimize states d and b
et au cours de l'exécution (ok, compilation), j'ai essayé de redéfinir current_state comme ceci:
int main(){
#define CURRENT_STATE STATE_A
do_a();
#undef CURRENT_STATE
#define CURRENT_STATE STATE_B
do_b();
....
}
Toutes les fonctions do_X() font des appels read_memory(). Je ne pouvais pas faire fonctionner cette approche. La valeur de l'état actuel est toujours STATE_A comme je peux le voir lorsque j'utilise les instructions #warning. Ce n'est pas ma question, mais si vous pouvez m'aider avec cela, je serai heureux. Donc, ma question est, y at-il un moyen de faire ce genre de chose en utilisant des modèles au lieu de macros?
Encore plus d'infos: Je dois utiliser une fonction inline car je ne peux pas exporter MEMORY [] et c'est une fonction de bibliothèque. Je préfère vraiment ne pas modifier le prototype de la fonction (comme read_memory() ...) mais ça va le faire. Aussi, pardonnez mon obscurité.
merci beaucoup,
Pourquoi voulez-vous utiliser des modèles pour cela? –
C'est ce que je pouvais penser pour les décisions de temps de compilation que je ne veux pas décider en cours d'exécution. Mais je suis ouvert. – perreal
OK, qu'est-ce qui vous fait penser qu'une décision d'exécution serait trop lente? Avez-vous décrit une telle chose? Nous voulons tous que notre code fonctionne "très rapidement" et 99,99% du temps c'est exactement ce qu'il fait, sans utilisation exotique de macros ou de modèles. –