Gå til innhold

Singelton template problemer


Anbefalte innlegg

Jeg tenkte jeg skulle lage en template som skulle gjøre om klassene til singeltoner ved og stamme fra singelton templatet

 


class  klasse1:
public Singelton <klasse1>
{
public:
klasse1	(void);
~klasse1	(void);
};

 

her er singelton template koden

#ifndef SINGELTON_H
#define SINGELTON_H
#include "N_var.h"

#pragma once

template <typename T> class Singelton
{
public:
static T* GetObj(void)
{
 return m_pObj;
};

static void SetObj(T* pObj)
{
 m_pObj = pObj;
};

static T* m_pObj;
};

#endif

 

jeg tror det har noe med at funsjonene er statiske, men jeg har lite erfaring med template så jeg er ikke sikker.

 

probleme oppstår under kompileringen da den klager på at den ikke finner

static klasse1* GetObj(void)

 

alternative metoder å gjøre dette på motas også.

 

på forhånd takk.

Endret av Giddion
Lenke til kommentar
Videoannonse
Annonse

Du får nok en feil fra linkeren din vil jeg tro. Du får nok unresolved symbol eller noe lignende. Dette fordi du deklarer den statiske medlemsvariablen m_pObj, men definerer den aldri.

 

Legg til følgende linje under template klassen din:

 

template <class T> T* Singelton<T>::m_pObj;

 

Det bør hjelpe.

 

Når det kommer til logikken rundt singleton og hvordan de bør implementeres er det et stort og omdiskutert tema. Jeg har ikke tid til å gå nærmere inn pådet akkurat nå, men jeg kan i hvertfall anbefale en bok:

 

http://www.amazon.com/gp/product/0201704315

 

Den går inn i dybden på forskjellige implementasjoner av singletons. Her er en av enkleste:

 

class phoenix
{
phoenix() {}
phoenix(const phoenix & ) { }
phoenix & operator=(const phoenix &) {return *this; }
~phoenix() { };

public:
static phoenix & instance()
{
 static phoenix inst;
 return inst;
}
};

 

Tar forbehold om trykkleifer da jeg ikke har kompilert koden.

Endret av kjetil7
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...