Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Preprocesor unutar sablona

[es] :: C/C++ programiranje :: Preprocesor unutar sablona

[ Pregleda: 1930 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.sbb.rs.



+2790 Profil

icon Preprocesor unutar sablona27.08.2008. u 12:41 - pre 190 meseci
Imam šablonsku klasu, neka se zove A, koja ima argument koji je neki tip i koja treba da ima metodu koja vraća ime tog tipa kao string. Na primer:

Code:

#include <iostream>

using namespace std;

#define QUOTE(x) #x

template<typename T>
class A {
public:
    
    static void ispisiTip() { cout << QUOTE(T) << endl; }
};

int main() {
    A<int>::ispisiTip();

    return 0;
}


Problem je u tome što ovaj program ispisuje "T", a ne "int". Ukoliko umesto "QUOTE(T)" stavim "#T", dobijam grešku pri prevođenju. Sve je to logično, jer pre svih ostalih faza prevođenja pretprocesor mora u potpunosti da završi svoj deo posla. Šta da radim?
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Preprocesor unutar sablona27.08.2008. u 12:56 - pre 190 meseci
Ne moze to tako. Nije to PHP :)

Za takve stvari moras da koristis RTTI. Na primer:



Code:

#include <typeinfo>

template<typename T>
class A {
public:
    
    static void ispisiTip() { std::cout << typeid(T).name() << std::endl; }
};

int main() {
    A<int>::ispisiTip();

    return 0;
}


Tko leti vrijedi
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.sbb.rs.



+2790 Profil

icon Re: Preprocesor unutar sablona27.08.2008. u 13:09 - pre 190 meseci
Upravo sam to isprobao, kad si me pretekao. Baš si brzi Gonzaves. Koristimo uglavnom g++ pod Linux-om i MinGW pod Windows-ima, ali i MS VC++. Stoga bih više voleo da rešenje bude prenosivo u smislu da za iste tipove dobijam iste stringove, ali dobro, što ne može ne može. Za to bih morao da napišem funkciju koja će da pretabači GNU odnosno MS stringove u neke naše.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Preprocesor unutar sablona27.08.2008. u 19:40 - pre 190 meseci
Savetujem ti da osmotris VCF (http://vcf-online.org) i rtti sistem koji je tamo implementiran.

Uvodni clanak je ovde

http://www.codeproject.com/KB/library/vcf_rtti.aspx

Tko leti vrijedi
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
77.46.251.*



+9 Profil

icon Re: Preprocesor unutar sablona29.08.2008. u 23:01 - pre 190 meseci
@kiklop74
Hehe.. Nije to PHP... to je C++ :))) A evo i zašto...

@Nedeljko
Evo jednog portabilnog rešenja bez predprocesora i overhead-a u runtime-u zbog RTTI-a:

Code:

#include <iostream>
using namespace std;

template<typename U>
class IzaberiIme
{
    public:
        static const char *ime;
};

template<>
const char *IzaberiIme<int>::ime = "int";

template<>
const char *IzaberiIme<float>::ime = "float";

// itd...

template<typename T>
class A {
    public:
        static void ispisiTip() { std::cout << IzaberiIme<T>::ime << std::endl; }
};

int main()
{
    A<int>::ispisiTip();

    return 0;
}


bez potrebe za f-jom koja prevodi u tvoje stringove...

:)
 
Odgovor na temu

[es] :: C/C++ programiranje :: Preprocesor unutar sablona

[ Pregleda: 1930 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.