Ich habe eine seltsame typedef-Anweisung in einem C++ - Programm, generiert von Py ++.Wie kann der Zeiger auf eine Funktion ohne Dereferenzierung aufgerufen werden?
double radius(int); // function to be wrapped
typedef double (*radius_function_type)(int);
bp::def("radius", radius_function_type(&radius)); // bp::def is a function for wrapping
Was dachte ich, ist so weit aus, dass der oben typedef statemnt nicht von der Art ist, die meisten von uns sind vertraut mit,
typedef complex_type simple_alias;
Vielmehr ist es ein Weg, Zeiger auf eine Funktion zu deklarieren welches int als Argument nimmt und doppelt zurückgibt (wie der Prototyp). Also meine Frage ist nun, wie kommt Zeiger auf eine Funktion (ohne Dereferenzierung)genannt mit Adresse einer Funktion als Argument? Dies passt auch nicht zum Prototyp. Jemand bitte erklären!
eher wie eine C-Stil Typumwandlung, eigentlich. C++ hat static_cast, dynamic_cast usw. – crashmstr
Beachten Sie auch (ich denke), dass der Grund für diese Cast-Syntax die Kompatibilität mit Konstruktoren ist (insbesondere im Template-Code). So ruft MyClass (0) einen 1-arg-Konstruktor von MyClass, float (0) den gleichen Wert wie 0.0 und radius_function_type (0) den Nullzeiger auf double (*) (int). float (0), my_type (0) sind gleichbedeutend mit (float) 0, (my_type) 0. –
Es ist in der Tat keine Typumwandlung im C-Stil. C verwendet ausschließlich die Form (TYPE) EXPR. In C++ können Sie auch TYPE (EXPR) verwenden. Der vorherige Kommentar stellt korrekt fest, dass dies die Ctor-Form von Casting ist und Ctors offensichtlich eindeutig für C++ sind. – MSalters