Template Class wird nicht exportiert?
-
RobthaR schrieb:
Das oben ist der Quellcode, und Fehlermeldungen gibts keine, aber er zeigt, wenn ich die Classlibrary referenziere, weder Namespace noch Klassen an
Das ist auch richtig so, managed Templates sind nur in der Assembly sichtbar zu der sie gehören. Außerdem werden Templates zur Compilezeit aufgelöst, d.h. wenn du in deinem Code keine konkreten Instanzen der Templateklasse erzeugst, erzeugt der Compiler gar nichts.
Vermutlich suchst du eher was in der Form
public generic<typename T> ref class MyClass { ... }
Ich hab hier ein Buch, wo sich ein ganzes Kapitel dem Thema widmet:
"C++/CLI in Action" von Nishant Sivakumar, Manning Publications 2007
Das wäre vielleicht was für dich ...
-
nn schrieb:
Das wäre vielleicht was für dich ...
Er hat auch einen Codeproject Artikel dazu geschrieben
-
Vielen Dank
Nur public war hinter generic<typename>
Den Artikel hab ich auch gefunden
-
Noch eine Frage :
Ich habe eine Funktion T foo, in der ich eine Schleife durchlaufe und gegebenenfalls returne, aber dann geben nicht alle Pfade einen Wert zurück und so hab ich am Ende ein "return nullptr;", aber nullptr kann nicht zu T gecastet werden.
Wie vermeide ich jetzt die
not all control paths return a value
Warnung
-
Dann lass die Funktion void oder bool (als Fehlermeldung) zurückgeben und benutze einen Parameter für den Rückgabewert.
-
Das ändert daran ja nichts, ich kann ja nicht im Voraus wissen, was für einen typen T annimmt
-
RobthaR schrieb:
Das ändert daran ja nichts, ich kann ja nicht im Voraus wissen, was für einen typen T annimmt
Ich meine es so
template <typename T> bool getvalue(T& val) { if ( havevalue ) { val = value; return true; } else { return false; } }
-
Das ist natürlich ne Möglichkeit, oder ich machs mit nem throw Exception
-
Oder geb ein T* bzw. T^ zurück.
-
Und wenn als T eine ref class angegeben ist, z.B. String^, dann wäre der return ja String^^ ...
-
Ok, habs getestet, doppelte indirections sind da anscheinend nicht Möglich
-
Gib T() zurück
generic<typename T> T test(T x) { return T(); } int main(array<System::String ^> ^args) { Console::WriteLine(L"Hello World"); System::String ^t = test<System::String^>("Test"); return 0; }
A default instance of the type parameter may be created by using the () operator. For example:
T t = T();
where T is a type parameter in a generic class or method definition, initializes the variable to its default value. If T is a ref class it will be a null pointer; if T is a value class, the object is initialized to zero. This is called a default initializer.
-
Alles klar, vielen Dank an alle