Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++ Template

kayttaja-3842 [05.11.2013 20:01:53]

#

Terve,

Elikkä sellasta kyselisin, että tarvitseeko C++ mallille määrittää aina minkä tyyppistä tietotyyppiä se voi käyttää?

Eli:

#ifndef UEPOINTERLIST_H
#define UEPOINTERLIST_H

#include "ueglobals.h"

template<class T>
class UEPointerList
{

public:
	UEPointerList<T>();
	~UEPointerList<T>();

};

#endif

Katso kommentti.

#include "uepointerlist.h"

// Jos poistan tämän <int> määrityksen linkkeri antaa virheen.
template class UEPointerList<int>;

template<class T>
UEPointerList<T>::UEPointerList()
{

}

template<class T>
UEPointerList<T>::~UEPointerList()
{

}
//Käyttö
UEPointerList<int> _plTexturePointerList;

Lahha [05.11.2013 20:59:58]

#

Template luokkien jäsen funktiot pitää määritellä headerissä. Erillästä koodi tiedostoa ei tarvitse tehdä.

Tämä johtuu siitä että template luokkaa ei voi kääntää ennen kuin sen tyyppi parametrit on tiedossa.

#ifndef UEPOINTERLIST_H
#define UEPOINTERLIST_H

#include "ueglobals.h"

template<class T>
class UEPointerList
{

public:
    UEPointerList<T>()
    {
    }

    ~UEPointerList<T>()
    {
    }
};

#endif

Metabolix [05.11.2013 21:45:25]

#

Lahha kirjoitti:

Template luokkien jäsen funktiot pitää määritellä headerissä.

Varsinaisesti ei ole pakko, vaan voi tehdä myös noin, kuin kayttaja-3842 on tehnyt. Silloin kuitenkin pitää päättää valmiiksi, mille tyypeille templaatti käännetään. Jos tiedetään, mitä tarvitaan, tästä on hyötyäkin: toteutukset ovat eri tiedostossa ja niitä voi muokata ilman, että koko projektia tarvitsee kääntää uudestaan.

Jos taas funktiot ovat otsikkotiedostossa, kääntäjä voi kääntää ne tarpeen mukaan. Toisaalta funktioiden muuttuessa kaikki templaattia käyttävät kooditiedostot täytyy kääntää uudestaan, koska funktiot on käännetty niiden jokaisen mukaan.

kayttaja-3842 [06.11.2013 11:34:27]

#

Tosiaan vaatikin noiden metodien määrityksen tuossa headereissa.

Nyt toimii, kiitos. :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta