次のようなコードを書きたい:
/*something*/ Fn() { ... }
int main()
{
/*something*/ fn = Fn;
while(fn) fn = fn();
return 0;
}
これを完全にタイプセーフな方法にすることは可能ですか? C、C++、D、C#、Java、またはその他の静的に型付けされた言語を想定します。
次のようなコードを書きたい:
/*something*/ Fn() { ... }
int main()
{
/*something*/ fn = Fn;
while(fn) fn = fn();
return 0;
}
これを完全にタイプセーフな方法にすることは可能ですか? C、C++、D、C#、Java、またはその他の静的に型付けされた言語を想定します。
これが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;
}
}