Vorlage, Verknüpfung und Trennung .h und .cc-Dateien

Habe ich schon etwas Lesen in der Gestaltung template-code haben Sie eine Frage über es. Die meisten Lösungen für Probleme in Bezug auf die Gestaltung von code-templates scheinen entweder:

  1. Setzen Definitionen von Prototypen in der header-Datei
  2. Verwenden Sie das export-Schlüsselwort wie diese (erfordert eine zusätzliche compiler-option)
  3. Konkret darlegen, wie die Vorlagen verwendet werden .cc/.cpp Datei.

Beispiel:

//File: foo_impl.cc
//We're working with Class Foo
#include "foo.cc"

template class Foo <int>;
template class Foo <string>;
//etc.

Keiner dieser Methoden scheinen sehr effektiv. Es sei denn, ich bin fehlt etwas, Sie scheinen nicht die Möglichkeit bieten, einem Benutzer einfach importieren die header-Datei und link das template-code (in ein .cc-Datei), ohne dabei zusätzliche Arbeit. Ich Frage mich, ob die Menschen konnten schauen, was ich mache, mit meinem eigenen code und sagen Sie mir, wenn diese gegen irgendeine Art von best practices-Protokoll oder, wenn Sie könnte dazu führen, ein Problem, dass ich einfach nicht sehen. Hier ist, was ich getan habe...

In main.cc:

#include <iostream>
#include "foo.h"

using namespace std;

int main (void) {
   Foo <string> f ("hello world");
   string s = f.get ();
   cout << s << endl;

   return 0;
}

In foo.h:

#ifndef FOO_H
#define FOO_H

template <class T>
class Foo {
   public:
      Foo (T);
      T get ();

   private:
      T data;
};

#endif

#include "foo.cc"

In foo.cc:

#ifndef FOO_CC
#define FOO_CC

#include "foo.h"

template <class T>
Foo :: Foo (T stuff) {
   data = stuff;
}

template <class T>
T Foo <T> :: get () {
   return data;
}

#endif

Habe ich in der Lage, den code zu kompilieren mit allen Warnungen des gcc 4.1.2. Danke!

  • Sind Sie gerade versuchen, um separate Dateien, die wie wir für den normalen c++ - Dateien, um Definitionen und Erklärung in separate Dateien? Oder Sie denken, Sie können sich nicht teilen, Ihren code zur Implementierung auf andere Benutzer, gonna benutzen Sie Ihren code als Bibliothek? U kann erarbeiten, was Sie erreichen wollen?
  • Ich möchte nur zur Behandlung von meinem template-code, als wäre es nur ein weiteres .h und .cc-Datei. Ich möchte eine header-Datei, die einfach zu Lesen durch die Aufrufe ohne Füllstoffe es.
  • Ich wirklich tun dies auch, mit einem #ifdef _DEBUG template class Foo <int>; #endif am Ende, so kann ich erzwingen, dass es kompiliert mit MSVC und sicher sein, dass alles instanziert, ohne Fehler.
Schreibe einen Kommentar