Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » template auf Typen einschränken.

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 ] > 2 <
010
07.02.2007, 12:39 Uhr
Kest
saint


Benutz doch >switch< !!!

*g*
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
07.02.2007, 12:50 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von Kest:
Benutz doch >switch< !!!

*g*

Das passt weder zum Thema, noch ist es irgendwie lustig, also nächstes mal bitte nur Themenbezogene Antworten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
07.02.2007, 13:14 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



Zitat von Kest:
Benutz doch >switch< !!!


Sinnvoller wäre es in dem Fall wohl eine Liste mit den Bedingungen zu machen und diese in einer schleife zu prüfen. Dann muss man die neue Schuhart nur noch in die Liste einfügen und gut ist.

btw.: Wieso überhaupt Schuhe? Entweder du arbeitest für eine sehr wohlhabende Dame, die mit der Anzahl Ihrer Schuhe nicht mehr zurecht kommt oder du arbeitest für eine Schuhfabrik (wobei die wohl kaum Schuhschränke benutzt) oder du willst einfach nur üben ?!
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
07.02.2007, 15:17 Uhr
wxLearner




Zitat:
So das soll schon reichen. Ich hätte gerne, das ich die Typen für T auf Klassen beschränke, die entweder Schuh sind oder von Schuh erben. Ein int z.B. macht hier einfach keinen Sinn. Kann man sowas in C++ irgendwie bewerkstelligen?
Das geht in C++ indirekt, indem der Schuhschrank Methoden benutzt, die nur Schuhe haben. Sobald der Schuhschrank zum Beispiel schaut
C++:
if(schuh[2].istSchuhsohleSchmutzig())
{
    //...
}
können nur noch Typen für T verwendet werden, die auch ein Methode "istSchuhsohleSchmutzig" anbieten. Somit würde schonmal int (und viele andere Typen) bereits zur Compilezeit ausscheiden.
--

Dieser Post wurde am 07.02.2007 um 15:20 Uhr von wxLearner editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
09.02.2007, 09:52 Uhr
RHBaum




Zitat:

Das ganze klingt designtechnisch schoh haarstraeubend :-)



Ich wuerd auch wie beef versuchen die ganze sache ueber die vtables laufen zu lassen ....
- Interface klasse fuer den Basisschuh
- Implementation der Schuhe mit schuhtypischen verhalten
- Objectfactory zum erzeugen der Schuhe (instanzen)
- dann immer nur die schoen die virtuellen functionen aufrufen die zu dem spezifischen verhalten fuehren.
- evtl. bei den Design-patterns, insbesondere bei den verhaltensmustern noch anregungen holen
- taeglich Al Bandy schauen :-)

Ansonsten generell zu der Template frage:
Generelles Template erstellen und da drin nix implementieren oder was unsinniges (aray groesse 0 aufmachen oder so)
templates auf die gewuenschten typen spezialisieren und dort richtig implementieren.
- wenn dann nen template mit nem "falschen" typ aufrufst, kennt der entweder deine methoden nicht, oder haut dir gleich ne exception wegen dem unsinnigen um die ohren ....

Ciao ....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
09.02.2007, 12:14 Uhr
stephanw
localhorst



Zitat:
Ansonsten generell zu der Template frage:
Generelles Template erstellen und da drin nix implementieren oder was unsinniges (aray groesse 0 aufmachen oder so)
templates auf die gewuenschten typen spezialisieren und dort richtig implementieren.
- wenn dann nen template mit nem "falschen" typ aufrufst, kennt der entweder deine methoden nicht, oder haut dir gleich ne exception wegen dem unsinnigen um die ohren ....

Naja, sowas muss man nicht mal mit derartigen Compile-Time-Assertions machen. Man kann ja auch das Einfügen in den Schrank durch Templates-Klassen machen, die keine automatische Konvertierung haben:

C++:
class Shoe {};

class S1 : public Shoe {};
class S2 : public Shoe {};

class S5 : public S1 {};
class S8 : public S5 {};


template<class ShoeInserter>
class ShoeLocker
{
public:

  void insertShoe( ShoeInserter si )
  {
    shoes_.push_back( si.get() );
  }

private:
  std::vector<Shoe*> shoes_;
};


template<class S>
class ShoeInserter
{
public:
  explicit ShoeInserter( S* s )
  : shoe_(s) {}
  Shoe* get() const { return shoe_; }
private:
  Shoe* shoe_;
};


int main()
{
  ShoeLocker< ShoeInserter<S5> > shoeLockerS5; // nur fuer S5 gedacht

  S5* s5 = new S5;
  S1* s1 = new S1;

  shoeLockerS5.insertShoe( ShoeInserter<S5>( s5 ) );

  shoeLockerS5.insertShoe( ShoeInserter<S1>( s1 ) ); // Fehler
  // aber
  shoeLockerS5.insertShoe( ShoeInserter<S5>( static_cast<S5*>(s1) ) );
}



Wie man das (ohne dynamic_cast oder andere Laufzeittests) verhindern könnte, ist mir bisher nicht eingefallen ;-)
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 09.02.2007 um 12:17 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
09.02.2007, 13:20 Uhr
RHBaum



Naja, das Tolle an den Templates ist es eben, das man es zur compilezeit hinbekommt. Wenn ich die Entscheidung erst zur Laufzeit (dynamic_cast) mache, verlier ich halt bisserl Zeit ... und werd halt erst zur Laufzeit auf die unzulaenglichkeit aufmerksam gemacht.

Wenn es allerdings ned auf laufzeit und laufzeit/compilezeit Verhalten ankommt, machen die templates natuerlich auch ned viel sinn ^^

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
12.02.2007, 10:06 Uhr
stephanw
localhorst


Ok, mein Beispiel war insofern Quatsch, da ich das Problem nur vom Schuhschrank auf den Einfüger verschoben habe.

Mfg
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


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: