Forum: PC-Programmierung cast operator außerhalb von Klasse definieren und implementieren


von Vlad T. (vlad_tepesch)


Lesenswert?

Hi, ich habe 2 Klassen aus unterschiedlichen Bibliotheken und möchte 
einen Castoperator erstellen, der die eine in die andere umwandelt.

Alles was ich grad aus google ausgraben konnte implementiert das als 
member der Klasse.
Aus naheliegenden Gründen kann ich die Klassen aber nicht anfassen.

Ich war mir sicher es geht, aber ich kriegs nicht hin.

folgende Variante habe ich schon probiert:
1
template<typename T>
2
MyPoint<T> operator MyPoint<T> (cv::Point_<T> p)
3
{
4
  return MyPoint<T> m(p.x, p.y );
5
}
6
7
template<typename T>
8
MyPoint<T> operator (cv::Point_<T> p)
9
{
10
  return MyPoint<T> m(p.x, p.y );
11
}
12
13
template<typename T>
14
operator MyPoint<T> (cv::Point_<T> p)
15
{
16
  return MyPoint<T> m(p.x, p.y );
17
}

wäre für einen Tip dankbar
Vlad

von Karl H. (kbuchegg)


Lesenswert?

Conversion Operatoren (so heissen die Dinger wirklich), müssen non 
static class Members sein.

Ich denke, das ist deswegen so, weil es dem Compiler zuviele Freiheiten 
geben würde, so eine Konvertierung implizit einzusetzen. Denn um sein 
Ziel, eine Angleichung von Datentypen zu erreichen, benutzt der Compiler 
hemmungslos alles, was er an Constructoren bzw. Conversion Operators 
finden kann. Mit zuvielen Konstruktoren bzw. Conversion Operators hat 
sich schon so manch einer ins Knie geschossen (inkl. mir): Dinge die 
eigentlich nicht compilieren sollten wurden vom Compiler mithilfe von 
CTors und conv-op so hingedreht, dass sie syntaktisch korrekt wurden.

von Vlad T. (vlad_tepesch)


Lesenswert?

zu schade, also doch eine Konverterfunktion

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.