Funktion innerhalb Funktion
-
Hi,
ich wundere mich gerade. Ist es denn nicht möglich eine Funktion innerhalb einer anderen Funktion zu deklarieren und auch zu definieren? Mein Beuspiel:
void vtkQGLRenderWindowInteractor::ProcessSlotConnections(bool conn) { if( ! RenderWindow ) { vtkErrorMacro(<< "vtkQGLRenderWindowInteractor::Initialize(): No render window attached!"); return; } int summe(int a, int b) { // dies ist Zeile 252 return a+b; }Dies gibt folgenen Fehler:
[code] In member functionvoid vtkQGLRenderWindowInteractor::ProcessSlotConnections(bool)': vtkQGLRenderWindowInteractor.cc:252: error: syntax error before{' token
vtkQGLRenderWindowInteractor.cc: At global scope:[quote]Das sollte doch eigentlich klappen, oder?Karl
-
Nein.
-
C++ kann keine Funktionen in Funktionen. man kann aber (wie so oft) tricksen:
void coolFunction(...) { //do something cool struct { int operator()(int a, int b) { return a+b; } } sum; c=sum(1+2); //do something even cooler }ist aber natürlich keine _echte_ inner function, weil du keinen zugriff auf die 'parent' variablen hast. aber wenigstens passt der scope

-
Zugriff auf die 'parent' Variablen kann aber auch leicht ermöglicht werden:
#include <iostream> using namespace std; int main () { int x = 7; struct adder { int a; int operator()(int b){return a+b;} }; adder addx = {x}; cout << addx(8) << endl; }
-
Ich wundere mich gerade, dass man sowas machen will.... wozu sollte sowas bei einer objektorientierten Programmierweise gut sein?
-
Welchen Sinn soll das haben bzw. was willst du damit erreichen? Diese innere Funktion würde nur innerhalb der anderen Funktion sichtbar sein.
Was ich mir gut vorstellen kann, ist das du eher eine Art anonyme Funktion haben willst? Das würde mir eher einleuchten. Und da gibt es natürlich auch schon etwas, das sich Lambda Expression nennt und sogar (wenn ich es nicht ganz missverstanden habe) in den nächsten C++-Standard mit rein kommt.
Damit du das aber jetzt schon nutzen kannst, sollstes du dir Boost Lambda anschauen, das macht anonyme Funktionen möglich.
http://www.boost.org/doc/html/lambda.html
-
Mathias schrieb:
Ich wundere mich gerade, dass man sowas machen will.... wozu sollte sowas bei einer objektorientierten Programmierweise gut sein?
Naja, OOP ist nicht der Weisheit letzter Schluss. Gerade C++ ist doch eine Multiparadigmensprache, in der man auch mal nicht-OO machen kann. Ich glaube nur eher, das der Fragesteller keine innere Funktion sondern eine anonyme Funktion "sucht".
-
Es entzieht sich meiner Kenntniss welche grundlegenden Vorteile die funktionale Programmierung gegenüber der objektorientierten Programmierung hat, die es notwendig macht diese beiden Arten miteinander ohne Zwang zu mischen.

Was mich interessieren würde ist, wie du es schafst in C++ um Funktionen und Klassen drumrumzukommen?
Du kannst dir abstraktions Ebenen drüberziehen, Code generieren und Aspekte programmieren, der daraus entstehende Code wird aber immer entweder funktional oder objektorientiert sein.