Bonjour à tous,

Voilà je bloque sur un problème de conception et je me dis que peut-être les talents présents sur le forum vont pouvoir m'aider
Je programme un émulateur donc la rapidité du code est quand même important même si je privilégie la lisibilité du code.

Je gère 2 Interfaces :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
Class IWordReadable
{
    u32 readWord(u32 addr);
    u8  readUpperByte(u32 addr);  // typedef ReadByteFunction : u8 (*f) (u32)
    u8  readLowerByte(u32 addr);  // typedef ReadByteFunction : u8 (*f) (u32)
}
 
Class IByteReadable
{
   u8 readByte(u32 addr);           // typedef ReadByteFunction : u8 (*f) (u32)
}
On a ensuite les devices qui implémente telle ou telle interface.
Je voudrais ensuite par rapport à une adresse donnée aller taper directement la fonction ReadByteFunction correspondante.

Biensûr la seule solution que j'ai trouvé est de passer par les pointeurs de fonctions de la sorte :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
//device 1 implemente IWordReadable
//device 2 implemente IByteReadable
 
adressSpace[0x00000] = &device1->readUpperByte;
adressSpace[0x00001] = &device1->readLowerByte;
adressSpace[0x00002] = &device2->readByte;
adressSpace[0x00003] = &device2->readByte;
J'aurai voulu éviter de passer par des pointeurs de fonctions et mettre dans le tableau directement des pointeurs sur objets mais le problème c'est que pour une device implémentant IWordReadable il y'a 2 fonctions readBytes possible ce qui m'oblige à pointer à un niveau plus fin soit au niveau de la fonction.