funktionsaufruf - call by ref || call by pointer
-
SeppJ schrieb:
Referenzen und Arrays vertragen sich nicht so gut. Naja, eigentlich haben auch Pointer auf Arrays ihre Probleme.
Ja, die Syntax ist zum Heulen. Und man muß die Größe kennen, denn "int a[4]" ist ein anderer Typ als "int a[5]".
#include <iostream> using namespace std; template<int size> void foo(double (&arr)[size]){ for(int i=0;i!=size;++i) cout<<arr[i]<<' '; cout<<'\n'; } template<int size> void bar(double (*arr)[size]){ for(int i=0;i!=size;++i) cout<<(*arr)[i]<<' '; cout<<'\n'; } int main(){ double a[]={1,2,3.14}; foo(a); bar(&a); }
-
int(&f(double(std::string::*)(float(&)[666])))[42];
So, wer verrät mir den Typen von f? Am besten in Worten ausgeschrieben.
-
314159265358979 schrieb:
template <int N1, int N2, typename T1, typename T2, typename T3, typename T4>
T1(&f(T2(T3::*)(T4(&)[N1])))[N2];
[/cpp]
So, wer verrät mir den Typen von f? Am besten in Worten ausgeschrieben.f ist eine Funktion, die nimmt einen Methodenzeiger der Klasse T3 auf eine Methode, die nimmt eine Referenz auf ein N1 großes Array voller T4 und gibt zurück ein schnödes T2 und gibt zurück eine Referenz auf ein N2 großes Array von T1.
hey, Du hast mittendrin die Aufgabe geändert.
-
Wollte da die templates aus dem Spiel lassen, aber ja, richtig.
-
f ist eine Funktion, die einen Methodenzeiger auf eine Methode von von std::string mit dem Rückgabetyp double, die eine Referenz auf ein float[666]-Array nimmt, nimmt, die eine Referenz auf ein int[42]-Array zurückgibt.
-
- meh -
-
Meine Lieblingstyp ist
void (*s(void(*)()))();
zumal der sogar in der Standardbibliothek benutzt wird.
Wie lautet der Typ von s ausgeschrieben?
-
Eine Funktion, die einen Funktionszeiger void (*)() entegennimmt und einen ebensolchen zurückgibt. Etwas ähnliches wird bei der C-Standardfunktion signal benutzt, wobei es da noch etwas haarsträubender aussieht:
void (*signal(int, void (*)(int)))(int);
typedef ist euer Freund, Jungs.
-
seldon schrieb:
Eine Funktion, die einen Funktionszeiger void (*)() entegennimmt und einen ebensolchen zurückgibt.
seldon schrieb:
typedef ist euer Freund, Jungs.
Ja. Und man findet es heute praktisch nur noch mit typedef.
http://www.cplusplus.com/reference/std/new/set_new_handler/
-
seldon schrieb:
Eine Funktion, die einen Funktionszeiger void (*)() entegennimmt und einen ebensolchen zurückgibt.
Das verstehe ich nicht, kann mir das jemand zerlegen?