Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Klasse für alle Conatiner

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
11.06.2007, 22:12 Uhr
mike
Pinguinhüpfer
(Operator)


Hallo

Ich versuche eine Klasse machen die mit allen Containern zurecht kommt - nur ich steh voll auf dem Schlauch:

C++:
class Foo
{
  public:
    template<typename T>
      explicit Foo(std::istringstream &, T &);  /* String lesen - keine Hierachie erlaubt */
    template<typename T>
      explicit Foo(std::ifstream &,  T &); /* Datei lesen - keine Hierachie erlaubt */
   // .....
private:
     template<typename T>
      T *m_ptrContainer;
};

void Foo::AnalyseWord(const std::string &theString)
{
  int intVal;

  try {
    NumericConvert(theString, intVal);
    fill_n(back_inserter(m_ptrContainer), 1, intVal);
  } catch(std::runtime_error &e)
  {
    // Tu nix
  }

int main()
{
  std::ifstream bla;
  bla.open("foobar.ext");
  std::vector<int> vec;

  Foo parser(bla, vec);

}



Weiß einer wie man das machen könnte?

Danke im Voraus
lg
--

Dieser Post wurde am 11.06.2007 um 22:17 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.06.2007, 08:49 Uhr
Kest
saint


Hi!

Blick ich net durch. Willst du 'ne Klasse, die eine Datei in einen Vector einliest?
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.06.2007, 11:02 Uhr
0xdeadbeef
Gott
(Operator)



C++:
private:
     template<typename T>
      T *m_ptrContainer;


...was soll denn das bitte sein? Eine Instanz einer Vorlage? Die musste erst konkretisieren - templates werden ja zur Compilezeit aufgelöst.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.06.2007, 11:31 Uhr
mike
Pinguinhüpfer
(Operator)


Ja - ich weiß das ist falsch

Aber wie kann ich einen beliebigen Container sonst übergeben? Iteratoren?
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.06.2007, 12:01 Uhr
0xdeadbeef
Gott
(Operator)


Was du machen kannst, ist, Foo eine abstrakte Klasse zu machen - im Grunde sowas wie ein Java-Interface, davon dann eine template abzuleiten, und über eine generator-Funktion Das Verhalten zu emulieren. Quasi

C++:
class Foo {
public:
  virtual ~Foo() { }
  virtual void do_something() = 0;
};

template<typename T> class Foo_concrete : public Foo{
public:
  virtual void do_something() {
    std::copy(container_.begin(), container_.end(), std::ostream_iterator<typename T::value_type>(std::cout, " "));
  }
private:
  T container_;
};

template<typename T> Foo *generate_foo(T container) {
  return new Foo_concrete<T>(container);
}


...sowas in der Art.

Iteratoren wären auch denkbar, da musste aber aufpassen, dass die gültig bleiben. So oder so musst du zur Compilezeit wissen, was du da eigentlich hast. Ich für meinen Teil würde wahrscheinlich einfach die template direkt verwenden - welchen container du übergibst, weißt du ja dann schon. Und es ist ja auch ein bisschen so, dass unterschiedliche Container unterschiedlich behandelt werden müssen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 12.06.2007 um 12:04 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.06.2007, 15:59 Uhr
mike
Pinguinhüpfer
(Operator)


Hui. Hmm. Ich werds dann gleich mit Polymorphismus probieren

Trotzdem Danke
lg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: