Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » templates (policy?)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.04.2009, 18:19 Uhr
cmos



Hallo, ich habe eine Frage betreffend templates und policy
Policies sind für mich im Moment Neuland, als mag mir der ein
oder andere Fehler zu verzeihen.

Ich wollte folgendes probieren


C++:
template<class Type>
class TemplateT
{
        public:
            TemplateT(void){};
            ~TemplateT(void){};

            void Create(LPCTSTR lpFilename)
            {
                Type.Create(lpFilename);            
            }
};

class TypeA
{
      public:
              TypeA(){};
              ~TypeA(){}
              void Create(LPCTSTR lpFilename)
              {

              }
};



Wenn ich nun eine Instanz erzeuge...

C++:
TemplateT<TypeA> typeA;
typeA.Create("...");


dann funktioniert das natürlich nicht, denn der Kompiler schimpft bei

C++:
Type.Create(lpFilename);



Wenn ich aber die Create-Methode statisch habe, funktioniert es. Dass habe ich verstanden, warum das so ist.
Was muss man zusätzlich noch erledigen, damit ich das so...

C++:
TemplateT<TypeA> typeA;
typeA.Create("...");


verwenden kann ?

Grüße,
cmos

Dieser Post wurde am 17.04.2009 um 18:21 Uhr von cmos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.04.2009, 19:05 Uhr
0xdeadbeef
Gott
(Operator)


Das hängt davon ab, was du genau willst. Die zwei gängigsten Fälle dürften wohl

C++:
class hello_policy {
public:
  inline void use() { std::cout << "Hello, world." << std::endl; }
};

template<typename policy_t>
class policy_user {
public:
  void use_policy() {
    policy_.use();
  }

private:
  policy_t policy_;
};


und

C++:
class hello_policy {
public:
  static inline void use() { std::cout << "Hello, world." << std::endl; }
};

template<typename policy_t>
class policy_user {
public:
  void use_policy() {
    policy_t::use();
  }
};


Was am Ende sinnvoll ist, hängt wesentlich vom use case ab. Letzteres Beispiel verbietet sich vor allem dann, wenn die Policy einen Zustand halten muss.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.04.2009, 21:03 Uhr
cmos



Hallo und danke für die schnelle Antwort.
Also über statische methoden wollte ich es nicht haben. Ich möchte es schon
in die Richtung
TemplateT<TypeA> typeA
TemplateT<TypeB> typeB
typeA.MethodeX(...);
typeB.MethodeX(...);

bekommen.

Über static kenne ich es soweit, das man sich z.b. mit new die entsprechend neuen instanzen zurückgeben lassen kann. Aber das wmöchte ich dieses mal nicht. Sondern einfach nur den Typ bestimmen und benutzen können.

Grüße,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.04.2009, 23:17 Uhr
0xdeadbeef
Gott
(Operator)


Du kannst es doch auf die Art einfach als

C++:
policy_user<hello_policy> user;
user.use_policy();


benutzen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.04.2009, 23:53 Uhr
cmos



Hallo und vielen Dank,
das funktioniert jetzt auch soweit.

Grüße & danke nochmal,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: