Velg mal argument under kjøring i C ++

stemmer
8

Anta at jeg har et sett av funksjoner og klasser som malnettsteder å bruke enkel ( float) eller doublepresisjon. Selvfølgelig kunne jeg skrive bare to stykker av bootstrap kode, eller rote med makroer. Men kan jeg bare slå malparametere under kjøring?

Publisert på 03/03/2009 klokken 22:04
kilden bruker
På andre språk...                            


3 svar

stemmer
3

Maler er en samle-tidsmekanisme. BTW, makroer så vel (strengt tatt - en forbehandling mekanisme - som kommer selv før kompilering).

Svarte 03/03/2009 kl. 22:07
kilden bruker

stemmer
19

Nei, du kan ikke bytte malparametere under kjøring, da maler startes av kompilatoren under kompilering-tiden. Det du kan gjøre er å ha både maler stammer fra en felles base klasse, alltid bruke base klassen i koden din, og deretter bestemme hvilken avledet klasse å bruke under kjøring:

class Base
{
   ...
};

template <typename T>
class Foo : public Base
{
    ...
};

Base *newBase()
{
    if(some condition)
        return new Foo<float>();
    else
        return new Foo<double>();
}

Makroer har samme problem som maler, ved at de blir utvidet ved kompilering-tiden.

Svarte 03/03/2009 kl. 22:10
kilden bruker

stemmer
2

Maler er rent en kompilering konstruere, kompilatoren vil utvide en mal og lage din klasse / funksjon med den angitte argumentet og direkte oversette det til koden.

Hvis du prøver å veksle mellom foo<float>og foo<double>under kjøring, vil du enten må bruke noen metaprogramming lureri eller bare har separate kodebaner for hver.

Svarte 03/03/2009 kl. 22:11
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more