Können Sie bitte erklären, was die folgende Zeile bedeutet?C++ typedef Erklärung
typedef int (*Callback)(void * const param,int s)
Können Sie bitte erklären, was die folgende Zeile bedeutet?C++ typedef Erklärung
typedef int (*Callback)(void * const param,int s)
Es bedeutet, dass Callback
ein neuer Name für die Art ist: Zeiger auf eine Funktion, um ein zurückkehr int und zwei Parameter des Typs ‚const Zeiger auf void‘ und ‚int‘ nehmen.
int f(void * const param, int s)
{
/* ... */
}
Die Callback
kann verwendet werden, zu speichern, einen Zeiger auf f
:
Callback c = &f;
f
kann, ohne direkt Bezug über den Zeiger später aufgerufen werden Die Funktion seiner
eine Funktion f
Gegeben Name:
int result = c(NULL, 0);
Zum Zeitpunkt des Anrufs wird der Name f
nicht angezeigt.
Es schafft einen neuen „alias“ oder Namen, mit dem Sie Zeiger auf Funktionen beziehen, die int
und nehmen zwei Parameter zurück: ein void* const
und ein int. Anschließend können Sie Variablen dieses Typs erstellen, zu ihnen zuweisen, rufen Sie die Funktion durch sie usw., wie in:
int fn(void * const param,int s) { ... }
Callback p;
p = fn;
int x = p(NULL, 38);
Beachten Sie, dass typedef
s nicht wirklich neue Typen erstellen ... jedes Äquivalent typedef dem Einzel aufgelöst realer Typ für die Zwecke der Überladungsauflösung, Vorlage Instanziierung etc ..
Ich mag den Begriff Alias hier. Ich wünschte, typedef hätte eigentlich Typalias genannt (mit typedef, das neue Typen erzeugt). –
@Martin: das wäre wirklich gut - habe 'Vorlage
Es deklariert eine Funktion Typen:
// Set up Callback as a type that represents a function pointer
typedef int (*Callback)(void * const param,int s);
// A function that matches the Callback type
int myFunction(void* const param,int s)
{
// STUFF
return 1;
}
int main()
{
// declare a variable and assign to it.
Callback funcPtr = &myFunction;
}
und wie kann ich diese Funktion implementieren? – gln
@gln: es ist ein Zeiger auf Funktion, es bedeutete in der Regel zu einer vorhandenen Funktion, die die Signatur entspricht – icecrime
Was meinst du? –