Seite 1 von 2

VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 7:45 pm
von Xin
Ich habe folgende Template-Funktion:

Code: Alles auswählen

template <class T, void (*SetCoordinate)( int pointno, Point point, T * userData )>
void Bresenham( T * userData, Point start, Point end )
Ich kompiliere derzeit einiges meines Quellcodes mit Visual C++ 2008, weil unterschiedliche Compiler auch unterschiedliche Fehler finden. Das hier frisst der GCC, Visual C++ 2008 wirft jedoch folgende Meldung:

Code: Alles auswählen

c:\users\xin\desktop\genesys\trunk\de\xsd\algo\bresenham.h(26) : error C2993: 'XSD::Unit::Point': Ungültiger Typ für den Nichttyp-Vorlagenparameter 'point'
Es weiß nicht zufällig jemand, was mir VC++ damit sagen möchte?

Re: VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 7:58 pm
von cloidnerux
Es weiß nicht zufällig jemand, was mir VC++ damit sagen möchte?
Jap. Du willst einen unzepzifischen typ erstellen, ein Struct ist aber sehr spezifisch, also verwende einen Pointer:
http://msdn.microsoft.com/en-us/library ... 80%29.aspx

Re: VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 8:09 pm
von Xin
cloidnerux hat geschrieben:
Es weiß nicht zufällig jemand, was mir VC++ damit sagen möchte?
Jap. Du willst einen unzepzifischen typ erstellen, ein Struct ist aber sehr spezifisch, also verwende einen Pointer:
http://msdn.microsoft.com/en-us/library ... 80%29.aspx
Ich übergebe einen Zeiger - und zwar einen Zeiger auf eine Funktion, die nunmal eine teilweise spezifische Signatur hat.

Re: VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 8:10 pm
von cloidnerux
Ich übergebe einen Zeiger - und zwar einen Zeiger auf eine Funktion, die nunmal eine teilweise spezifische Signatur hat.
Und das mag er nicht.
Probiere es doch mit dem pointer auf das Struct aus.

Re: VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 8:11 pm
von Xin
cloidnerux hat geschrieben:
Ich übergebe einen Zeiger - und zwar einen Zeiger auf eine Funktion, die nunmal eine teilweise spezifische Signatur hat.
Und das mag er nicht.
Probiere es doch mit dem pointer auf das Struct aus.
Ich übergebe aber kein Struct an das Template, sondern eine Callback-Funktion und die ist nunmal so.

Re: VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 8:20 pm
von cloidnerux

Code: Alles auswählen

Point point
Ich beziehe mich auf das Struct point, auf das sich auch die Fehlermeldung bezieht.

Re: VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 8:32 pm
von Xin
cloidnerux hat geschrieben:

Code: Alles auswählen

Point point
Ich beziehe mich auf das Struct point, auf das sich auch die Fehlermeldung bezieht.
Ich auch: Und dieses gehört zu einer Signatur eines FunktionsPOINTERS.

Code: Alles auswählen

void (*SetCoordinate)( int pointno, Point point, T * userData )
Die 'Point point' wird nie übergeben, lediglich der Zeiger auf eine Funktion, die innerhalb des Templates als SetCoordinate bekannt sein wird und nun mal void zurückgibt und (int, Point T*) übergibt.

Re: VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 8:45 pm
von cloidnerux
Ich auch: Und dieses gehört zu einer Signatur eines FunktionsPOINTERS.
Das mag ja sein, doch deine Fehlermeldung bezieht sich darauf, das in dem Template eine Structur übergeben uwrde, das Template das aber nicht akzeptiert und einen Pointer verlangt.
Aber das Einzige Struct, das sich im Template befindet ist Point. Wenn es sich nicht darauf bezieht, auf was dann?

Re: VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 8:51 pm
von Xin
cloidnerux hat geschrieben:
Ich auch: Und dieses gehört zu einer Signatur eines FunktionsPOINTERS.
Das mag ja sein, doch deine Fehlermeldung bezieht sich darauf, das in dem Template eine Structur übergeben uwrde, das Template das aber nicht akzeptiert und einen Pointer verlangt.
Aber das Einzige Struct, das sich im Template befindet ist Point. Wenn es sich nicht darauf bezieht, auf was dann?
Es bezieht sich auf dieses point.

Trotzdem ist es kein Template-Übergabeparameter.
Ich brauche aber keine Lösung, wie ich etwas anderes zu programmieren habe, sondern eine Lösung, wie man eine derartige Signatur Visual C++ verständlich mache.

Re: VisualC++: Funktionsaufruf im Template

Verfasst: So Sep 27, 2009 10:33 pm
von Dirty Oerti
Ganz banal, zumindest kam mir das so in den Sinn, als ich mir das angeguckt habe. Funktioniert das:

Code: Alles auswählen

template <class T, void (*SetCoordinate)( int , Point , T * )>
void Bresenham( T * userData, Point start, Point end )
:?: