2012-01-03 3 views
0

Je dois exposer un tableau de fonctions dans mon application. Ces fonctions sont en fait des méthodes de cette classe et je remplirai le tableau dans le constructeur. Par exemple:Comment exposer un tableau de fonctions en tant que membre de classe en C++?

void Cpu::print() { // some func 
    std:cout << "hi"; 
} 

void Cpu::Cpu() { // class ctor 
    funcArray = { &Cpu::print } 
} 

Je veux faire ceci:

Cpu myCpu; 
(myCpu.*funcArray[0])(); 

Toutes mes fonctions vont suivre la même signature "void()".

Est-ce possible?

+1

Oui, mais pourquoi? C'est une odeur de design IMO. –

+1

À moins que vous ne vouliez obscurcir votre code, je suis à peu près sûr qu'il y a un ** beaucoup ** meilleur moyen de réaliser tout ce que vous essayez de faire. –

+1

Vous pouvez utiliser 'std :: vector ' comme votre type de données de base, mais je suis d'accord que le design peut être discutable. –

Répondre

0

Vous ne pouvez pas attribuer aux tableaux, mais vous pouvez utiliser des listes: initialiseur

class Cpu { 
public: 
    typedef void (Cpu::*Func)(); 

    ... 

    Func funcArray[CONSTANT]; 
}; 

Cpu::Cpu() : funcArray({ &Cpu::print }) { 
    // the rest of the array is filled with NULL pointers 
} 

Puis

Cpu cpu; 

(cpu.*(cpu.funcArray[0]))(); 
+0

Merci, mais j'utilise CLang qui ne supporte pas les listes d'initialisation :( –

+0

@EduardoCobuci êtes-vous sûr? Avez-vous essayé de compiler le code? Cela devrait être comme faire int arr [] = {1, 2, 3}; 'ça ne dépend pas de C++ 11 –

+0

Oui je l'ai fait.Vérifiez ce http://clang.llvm.org/cxx_status.html Ne vous inquiétez pas c'est assez et je pense que je peux contourner ce paramètre les valeurs de tableau un par un (256 mais c'est ok :) –

Questions connexes