template wird nicht erkannt
-
ich habe folgendes Template in einer DLL:
template<class T> public ref class MatrixT { public: MatrixT(MatrixT<T>^ Copy) {...} MatrixT(Int32 Rows, Int32 Cols) {...} ... };
Wenn ich nun in meiner Anwendung folgenden Aufruf mache:
MatrixT<System::Int32>^ m1 = gcnew MatrixT<System::Int32>(2, 2);
krieg ich folgenden Error:
2>.\Form1.cpp(58) : error C2065: 'MatrixT': nichtdeklarierter Bezeichner
Die DLL ist richtig eingebunden, auch Intellisense erkennt das Template.. was läuft hier schief?
-
Templates sind keine Generics. Das Template wird zur Zeit des Compilierens aufgelöst.
-
was heisst das? Dass ich das Template nicht ausserhalb der Anwendung in der DLL erstellen kann?
-
Du könntest ja einfach Generics verwenden:
http://www.codeproject.com/KB/mcpp/cppcligenerics.aspx
-
Wird mir ja dann wohl nichts anderes übrig bleiben.. dass Problem ist das ich dann innerhalb meines Matrix-Generics cli::array nicht verwenden kann..
-
kann mir jemand verraten wie ich es anstellen kann in einer Genericklasse zu rechnen?
Da System::Object keine Rechenoperatoren kennt akzeptiert der Kompiler Dinge wie
generic<class T> public ref class Matrix { public: Matrix(T t1, T t2) { T t3 = t1+t2; } };
Wie kann ich das lösen?
-
Wenn Du wirklich rechnen willst, ist vermutlich ein template besser;
Wenn es aber .NET sein soll (und in einer Assembly (DLL) sein soll), dann doch generics:#using <mscorlib.dll> using namespace System; generic<typename T> where T: IConvertible ref class Foo { public: Decimal Add(T a, T b) { Decimal da = a->ToDecimal(nullptr); Decimal db = b->ToDecimal(nullptr); Decimal erg = da + db; return erg; } }; int main() { Foo<int> fInt; Console::WriteLine(fInt.Add(12.5, 13.2)); Foo<double> fDbl; Console::WriteLine(fDbl.Add(12.5, 13.2)); }
-
Falls Du mit .NET rechnen möchtest würde ich mir mal IL Numerics angucken:
http://ilnumerics.net/