2010-07-01 19 views
2

Je veux écrire du code comme ceci:Comment définir une fonction qui peut renvoyer un pointeur sur lui-même?

/*something*/ Fn() { ... } 

int main() 
{ 
    /*something*/ fn = Fn; 
    while(fn) fn = fn(); 
    return 0; 
} 

Est-il possible de le faire est un type complètement de manière sûre? Supposons C, C++, D, C#, Java ou tout autre langage typé statiquement.

+0

Quelle est votre fin de partie? –

+0

Cela en fait un moteur DFA très simple. Ou avec 'vecteur ', un moteur NFA – BCS

+0

duplication possible de [Type autoréférentiel] (http://stackoverflow.com/questions/3048689/self-referential-type) BTW, la réponse acceptée n'est pas la réponse à votre question . Regardez la deuxième réponse. –

Répondre

1

Voici un exemple C#

delegate MyFunctionDelegate MyFunctionDelegate(); 

class Program 
{ 
    static void Main(string[] args) 
    { 
     MyFunctionDelegate fn = FN1; 
     while (fn!=null) 
      fn = fn(); 
    } 

    static MyFunctionDelegate FN1() 
    { 
     Console.WriteLine("FN1 called"); 
     MyFunctionDelegate returnDelegate = FN2; 
     return returnDelegate; 
    } 

    static MyFunctionDelegate FN2() 
    { 
     Console.WriteLine("FN2 called"); 
     return null; 
    } 
} 
+0

C# Je présume ??? – BCS

+0

Oui, désolé je l'ai mentionné dans mon orig. poster et a dû modifier pour le formatage. À mon avis, c'est un peu plus simple en C/C++ mais C# vous donne un bon typage. Avec C/C++, un pointeur peut pointer vers n'importe quoi et n'importe où. –