[VC++ 6 Problem] Template-Funktion die einen Funktionszeiger mit beliebigem Referenz-Parameter entgegennimmt
-
Hi..
Ich bin gerade bei der Portierung meines Programms auf den VC++ 6 wieder auf ein Problem gestoßen.
Ich habe eine Template-Funktion die einen Funktionszeiger mit einem beliebigem Referenz-Parameter entgegen nehmen soll.So siehts aus. (auf das Wesentliche minimiert)
void callbackFunction(int& i) { } template<class ParamType> void setCallbackFunction(void (*callbackFunction)(ParamType&)) { } int main() { setCallbackFunction(&callbackFunction); return 0; }
Alle Compiler kriegen das hin (auf 5 Compilern getestet), nur der VC++ 6 leider nicht. Die Fehlermeldung lautet:
Konvertierung des Parameters 1 von
'void (__cdecl *)(int &)' in
'void (__cdecl *)(int *& )' nicht moeglichWenn ich das & hinter ParamType entferne, kompiliert es zwar, aber dann ist ParamType in diesem Fall int&, ich bräuchte aber int.
Ist euch dafür ein Workaround bekannt?
-
ich denke das problem mit dem vc6 kann übergangen werden, rein theoretisch sollte er heutzutage eh nichmehr benutzt werden...
-
Ist das Absicht, dass du in der main-Funktion keinen Template-Parameter angibst? Oder bloß ein Abschreibfehler?
MfG SideWinder
-
@sidewinder: Er braucht keinen Template-Parameter, der Parameter müsste logischerweise in setCallbackFunction verwendet werden.
@otze: Ich z.B. setze den VC6 ein (und viele Kollegen auch), weil es irgendwelche höheren Führungskräfte so vorschreiben.
@gray:
Dein Problem hatte ich auch schon mal.
Habe mir nur dadurch helfen können, indem ich Referenz (&) durch Pointer (*) ersetzt habe.
-
ich denke das problem mit dem vc6 kann übergangen werden, rein theoretisch sollte er heutzutage eh nichmehr benutzt werden...
Du hast natürlich recht. Aber da bis auf diese Sache sonst alles läuft, will ich wenigstens den Versuch wagen es auf diesem Compiler noch zum Laufen zu bringen.
Ist das Absicht, dass du in der main-Funktion keinen Template-Parameter angibst? Oder bloß ein Abschreibfehler?
Absicht! Denn bei Template-Funktionen werden die Template-Parameter automatisch hergeleitet.
-
Hallo,
wenn die automatische Herleitung nicht funktioniert, kannst du auf explizite Angabe des Arguments umsteigen:void callbackFunction(int& i) { } template<class ParamType> void setCallbackFunction(void (*cb)(ParamType&)) { } int main() { setCallbackFunction<int>(&callbackFunction); return 0; }
Das klappt auch mit dem VC.
-
Monastero schrieb:
@otze: Ich z.B. setze den VC6 ein (und viele Kollegen auch), weil es irgendwelche höheren Führungskräfte so vorschreiben.
darf ich fragen, wie solche leute führungskräfte werden konnten, und nicht von der wirtschaftsevolution im vorfeld abgesetzt?
-
Hm, ist für mich auch nicht so einfach zu verstehen, aber es ging manchmal um das Problem oder Frage, ob und, wenn ja, wie eine Unmenge von Code-Zeilen (vielleicht 1.000.000 Stück) in eine neue Sprache oder einfach nur auf einen neuen Compiler umgestellt werden soll. Wenn dann nur eine geringe Umsetzungszeit bleibt, erscheint das Risiko des Fehlschlags einfach zu hoch. Dann bleibt man halt sicherheitshalber nochmal bei dem alten Werkzeug. Bei einem gänzlich neuen Projektanfang/Programm würde ich den Einsatz des VC6 aber auch als evolutionär veraltet ansehen.
Im Übrigen: So schlimm wie der VC++6 hier im Forum verteufelt wird, finde ich ihn jetzt aber auch nicht. Was habt Ihr eigentlich gegen den?
-
otze schrieb:
Monastero schrieb:
@otze: Ich z.B. setze den VC6 ein (und viele Kollegen auch), weil es irgendwelche höheren Führungskräfte so vorschreiben.
darf ich fragen, wie solche leute führungskräfte werden konnten, und nicht von der wirtschaftsevolution im vorfeld abgesetzt?
Wieso? Die Rechnen den Kosten/Nutzen-Faktor aus und kommen auf das Ergebnis, dass eine Neuanschaffung von einer 1000-Mann-Gruppenlizenz sich nicht rentiert. Vor allem weil man doppelt draufzahlt und im Notfall auch noch Quellcodes portieren muss.
MfG SideWinder
-
SideWinder schrieb:
otze schrieb:
Monastero schrieb:
@otze: Ich z.B. setze den VC6 ein (und viele Kollegen auch), weil es irgendwelche höheren Führungskräfte so vorschreiben.
darf ich fragen, wie solche leute führungskräfte werden konnten, und nicht von der wirtschaftsevolution im vorfeld abgesetzt?
Wieso? Die Rechnen den Kosten/Nutzen-Faktor aus und kommen auf das Ergebnis, dass eine Neuanschaffung von einer 1000-Mann-Gruppenlizenz sich nicht rentiert. Vor allem weil man doppelt draufzahlt und im Notfall auch noch Quellcodes portieren muss.
MfG SideWinder
sicher muss man zuerst draufzahlen, aber zwischen vc 6.0 und dem neuesten liegen welten. Das was man am anfang an zeit aufbieten muss, holt man sich durch die neuen möglichkeiten schnell wieder rein.
vorallem werden die programme schneller durch die besseren optimierungen, und kunden die ein schnelles bugfreies programm haben werden auch den nachfolger sicher kaufen.
-
otze schrieb:
SideWinder schrieb:
otze schrieb:
Monastero schrieb:
@otze: Ich z.B. setze den VC6 ein (und viele Kollegen auch), weil es irgendwelche höheren Führungskräfte so vorschreiben.
darf ich fragen, wie solche leute führungskräfte werden konnten, und nicht von der wirtschaftsevolution im vorfeld abgesetzt?
Wieso? Die Rechnen den Kosten/Nutzen-Faktor aus und kommen auf das Ergebnis, dass eine Neuanschaffung von einer 1000-Mann-Gruppenlizenz sich nicht rentiert. Vor allem weil man doppelt draufzahlt und im Notfall auch noch Quellcodes portieren muss.
MfG SideWinder
sicher muss man zuerst draufzahlen, aber zwischen vc 6.0 und dem neuesten liegen welten. Das was man am anfang an zeit aufbieten muss, holt man sich durch die neuen möglichkeiten schnell wieder rein.
vorallem werden die programme schneller durch die besseren optimierungen, und kunden die ein schnelles bugfreies programm haben werden auch den nachfolger sicher kaufen.
aha, durch ein Upgrade der IDE werden also die Programme bugfreier.
Devil
-
da der debugger besser wird?
-
Okay wenn du das mit dem Zahlen übernimmst kaufen wir neue Software otze
MfG SideWinder