Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420

    [c++] problema.. soluzione template?

    salve a tutti,
    so che il codice seguente da errori in fase di compilazione ma vorrei fare un qualcosa di questo tipo:

    codice:
    class A
    {
    protected:
     const int size;
     A(int s) size(s): 
    };
    
    class B: public A
    {
    int b;
    const int pippo;
    B(int p):pippo(p){b=size}
    };
    
    //.cpp file
    int parA =2;
    int parB = 4;
    
    BditipoA<parA>  myobj(parB);

    sono convinto che si possa fare ma non so come..
    qualche suggerimento?


    edit:
    stavo pensando anche a qualcosa che non c'entra nulla con i template:
    codice:
    A ogg1(3);
    
    B ogg2 = ogg1.foo(3);
    
    //con B foo(int x);
    the sALIEN

  2. #2
    Francamente ho riletto un paio di volte il tuo post ma non ho capito cosa tu voglia fare.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ciao,
    si non mi sono espresso in modo molto chiaro, hai ragione..

    Il mio problema è il seguente:

    ho una classe X che ha un costruttore che prende in ingresso un valore. All'interno di questa classe devo utilizzare degli oggetti di una certa classe Y, anche questa classe Y ha un costruttore con alcuni parametri in input. Io vorrei fare in modo che la classe Y sia legata in qualche modo ai parametri forniti al costruttore della classe X.

    vorrei fare una cosa del tipo: (ovviamente questo non funzionerà..)
    codice:
    class Y 
    {
    public:
    int ciao;
    const int var2;
    Y(int b) : var2(b){  ciao = var1 + var2 }
    }
    
    class X
    {
    public:
    const int var1;
    X(int a):var1(a){   }
    int foo();
    };
    
    //cpp
    int X::foo()
    {
    Y hello(2);
    return  Y.ciao ;
    }
    Scrivendo qualcosa del tipo: X myx(5); la funzione foo restituirà 7 (ossia 5+2)
    con X myx(10) restituirà 12 ecc


    Se non mi son spiegato bene neanche ora, fammi sapere
    ps non voglio usare variabili statiche

    EDIT: rimodificato l'esempio
    the sALIEN

  4. #4
    Originariamente inviato da thesalien
    Io vorrei fare in modo che la classe Y sia legata in qualche modo ai parametri forniti al costruttore della classe X.
    Puoi ad esempio passare il membro di X al costrutore di Y ad esempio:
    codice:
    class Y 
    {
    public:
    int ciao;
    const int var2;
    Y(int b, int valueFromX) : var2(b){  ciao = valueFromX + var2 }
    }
    
    class X
    {
    public:
    const int var1;
    X(int a):var1(a){   }
    int foo();
    };
    
    //cpp
    int X::foo()
    {
    Y hello(2, var1);
    return  Y.ciao ;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ciao, thx per la risposta.
    Si, per ora il mio codice funziona in questo modo ma purtroppo questa soluzione non mi va bene perché vorrei rendere questo codice un pò più ottimizzato diciamo.. e penso che non abbia troppo senso passare al costruttore di Y un valore che è praticamente sempre lo stesso una volta istanziato X
    the sALIEN

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    un'altra possibile soluzione potrebbe essere quella di usare una variabile globale, ma mi è sempre stato detto che queste sono da evitare come la peste..
    the sALIEN

  7. #7
    Intendi una cosa del genere?
    codice:
    // $ g++ -Wall -ansi -pedantic -Wextra -Wconversion main.cpp 
    // $ ./a.out 
    // $ x.foo (): 7
    
    
    #include <iostream>
    
    template <int TValueFromX>
    class Y{
    	public:
    	const int ciao;
    	Y(int b) : ciao (TValueFromX + b){
    	}
    };
    
    template <int TVar1>
    class X{
    	public:
    	int foo();
    };
    
    template <int TVar1>
    int X<TVar1>::foo(){
    	Y <TVar1> hello(2);
    	return  hello.ciao ;
    }
    
    int main (){
    	X <5> x;
    	std::cout << "x.foo (): "  << x.foo () << std::endl;
    	return 0;
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ciao scusa per la mia tarda risposta ma ero fuori casa..
    Ho provato a fare alcune prove ed effettivamente cosi' funziona anche se mi sa che abbandonerò quest'idea dei template perché probabilmente dovrò utilizzare anche degli input a runtime e quindi con i template non posso fare un bel niente in questo caso..

    Thanks very much
    the sALIEN

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.