Как определить функцию, которая может возвращать указатель на себя? - PullRequest
2 голосов
/ 01 июля 2010

Я хочу написать код, подобный следующему:

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

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

Возможно ли сделать это полностью безопасным способом?Предположим, C, C ++, D, C #, Java или любой другой статически типизированный язык.

1 Ответ

1 голос
/ 01 июля 2010

Вот пример 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;
    }
}
...