Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C++] Contenuti di variabili come linguaggio

    Salve, sto facendo un progetto in cui ho bisogno di fare l'analogo di php:

    $nome = "variabile";
    $$nome_1 = true;

    Ora mi spiego meglio.

    Ho una classe templata, che può usare tanti tipi come templatura.
    I tipi che questa può usare vengono forniti in input dalla persona che usa il programma.
    Necessariamente, in input la stringa che contiene il tipo sarà un char[].

    Ho bisogno di usare il contenuto dei char in ingresso proprio come testo di linguaggio, perché altrimenti la soluzione è quella di fare degli switch (o if-else) i cui contenuti siano tutti uguali con solo la chiamata al template diversa.

    Cioè, io vorrei cambiare il programma da così:

    codice:
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	char g[10];
    	cin >> g;
    	
    	switch (g) {
    		case 'int':
    			Classe<int> c;
    			break;
    		case 'float':
    			Classe<float> c;
    			break;
    		case 'double':
    			Classe<double> c;
    			break;
    	}
    	
    	return 0;
    }
    A così:

    codice:
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	char g[10];
    	cin >> g;
    
    	Classe<g> c;
    
    	return 0;
    }
    È possibile farlo in qualche modo?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non con i template. I tipi con cui istanziare i template devono essere noti in fase di compilazione.

    edit:

    forse puoi trovare qualche spunto qui:
    http://www.eptacom.net/pubblicazioni/pub_it/nl_2.html

  3. #3
    Il fatto è che al momento dell'input, l'utente può scegliere quale tra le 10 Classi disponibili usare, e per quella scelta quale tra i 4 Tipi disponibili usare, quindi il modo che viene naturale pensare per primo è un doppio switch, solo che vengono fuori decine e decine di righe uguali, cambiate solo per il nome della classe e il tipo dato al template.

    Usando due switch che usino typedef si può risparmiare e tempo, ma cmq speravo ci fosse un modo dinamico per scrivere il linguaggio :master:

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se riesci a raggruppare le operazioni comuni da fare in una classe base, puoi usare il polimorfismo e il Factory pattern e selezionare la classe desiderata tramite una string. Ovviamente dovrai prevedere a priori quante classi sono necessarie.

  5. #5
    Anche se vedo che comunque uno switch ci dovrà essere, certo così il codice può essere meglio organizzato e scritto.

    Grazie

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Che bella feature, veramente.
    Non avrei mai pensato che apotesse essere fatto anche con il C++
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Stai dimenticando la prima regola del C++: in C++ tutto è possibile (magari con dei super-template astratti pseudo-virtuali e delle triple-macro all'amaretto con doppia piroetta carpiata, ma comunque è possibile).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Originariamente inviato da MItaly
    Stai dimenticando la prima regola del C++: in C++ tutto è possibile (magari con dei super-template astratti pseudo-virtuali e delle triple-macro all'amaretto con doppia piroetta carpiata, ma comunque è possibile).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.