2010-08-19 7 views
0

Lorsque je crée la variable je viens de mettre l'un nom, mais puis-je créer le nom comme la variable suivante:C++ nom de la variable spéciale

int var+1= 1; 

Donc, fondamentalement, cela devrait être:

int var1=1; 

Je sais que je ne peux pas utiliser le signe + pour le faire, mais est-il possible de le faire?


EDIT

int g=1; 
string hello+g = "sdljfsdl"; // So hello+g will be hello1 

Il est comme mélange valeur de la variable par une autre valeur variable pour obtenir le nouveau nom de la variable.

+1

Ce que vous voulez * exactement * n'est pas possible avec C++. Vous pouvez utiliser des tableaux ou 'std :: map' ou quelque chose de cette nature pour imiter ce que vous demandez. – strager

+1

Comment allez-vous vous référer à 'hello + g' après avoir initialisé la variable? –

Répondre

13

Vous pouvez le faire avec des macros, mais vous devriez vraiment pas besoin de noms de variables dynamiques. On dirait que ce genre de problème peut être résolu avec un tableau:

int vars[5]; 

vars[0] = 3; 
vars[1] = 4; 
// etc. 
+0

Je ne peux pas utiliser les tableaux – Ramilol

+5

@Ramiz: pourquoi ne pas utiliser des tableaux? –

6

Il est peu susceptible d'être souhaitable, mais vous pouvez utiliser le collage jeton dans le préprocesseur:

#define PASTER(x, y) x ## y 
#define EVALUATOR(x, y) PASTER(x, y) 

int EVALUATOR(var, 1) = 1; 
+1

"peu probable d'être souhaitable" est un euphémisme. N'y a-t-il pas assez de Macros C dans le monde? –

+0

@Merlyn: il y a beaucoup trop de macros - néanmoins, celle-ci atteindrait plus ou moins le résultat désiré, bien que le nom soit si long qu'il submerge le nom de la variable de base. Quel est un autre argument contre l'utilisation. –

+2

@Johnathan: C'est pourquoi vous le nommez quelque chose de court. Et se débarrasser du * shift * parce que c'est plus difficile à taper: '#define w (x, y) x ## y' ...' #define k (x, y) w (x, y) '... 'int k (var, 1) = 1;'. Ou encore mieux, nommez-le après une fonction que vous n'utilisez jamais, comme realloc ... –

0

vous avez besoin presque certainement std::map, ou, le cas échéant, unordered_map. les deux vous permettront de construire les clés comme vous le souhaitez et de définir/obtenir des valeurs pour ces clés, par exemple.

std::map<string,int mymap; 
string fixed = "fixed part"; 
string var = " 1"; //or construct this from a number 
mymap[fixed+var] = 3; //fixed+var == "fixed part 1" 
Questions connexes