2010-05-01 6 views
2

en C++, lorsque vous définissez une fonction qui prend un argument, vous devez définir le type de données de cette variable:C type de données dynamique de fonction ++ définition

void makeProccess(int request) 

Cependant, je veux mettre en œuvre une fonction qui prend différents types de données prenant plutôt un type entier défini statiquement.

void makeProccess(anyType request) 

Comment puis-je concevoir un processus comme celui-ci, une idée?

Merci.

Répondre

3

Utiliser des modèles:

template <typename T> 
void makeProcess(T request) { 
    // request is of type "T", which can vary 
    cout << "request: " << request; 
} 

Un autre avantage, est que vous pouvez spécialiser:

template <> 
void makeProcess(string request) { 
    cout << "This is special handling for a string request: " << request; 
} 
1

Avez-vous envisager d'utiliser tamplates pour cela?

template <class T> void makeProcess(T request) 
{ 
    // code 
} 
0

Tout d'abord, les "utiliser des modèles" réponses sont très utiles - vous devriez enquêter sur les modèles C'est une autre alternative à ceux-là.

Si la fonction transmet la valeur à un autre code qui sait exactement quel type est "inside", vous pouvez également utiliser boost :: any - voir http://www.boost.org/doc/libs/1_42_0/doc/html/any.html. Cela peut être un peu dangereux, car vous pouvez facilement obtenir du code qui est couplé/interdépendant d'une manière qui n'est pas évidente, et qui se bloque à l'exécution au lieu de ne pas compiler (ce qui arriverait avec les templates). Cependant, il peut être significativement plus compréhensible pour les codeurs C++ non experts que de grandes quantités de code de modèle.

(Notez que tout boost :: exige également que le type est copiable et cessible.)

Questions connexes