C++のばやい、voidを返すことができます。たとえば:
#include <iostream>
#include <functional>
namespace std { using namespace std::tr1; }
void f() { std::cout << "f()\n"; }
void g() { std::cout << "g() calls:"; return f(); } // ココ!
int main() {
std::function<void(void)> function = g;
function();
}
かたやC#では:
using System;
class Program {
public static void f() { Console.WriteLine("f()"); }
public static void g() { Console.Write("g() calls:"); return f();} // ココ!
public static void Main() {
g();
}
}
error CS0127: 'Program.g()' は void 型を返すため、キーワード
return の後にオブジェクト式を指定することはできません。
しょぼーん。
Action<T> と Func<T,TResult> を統一的に扱いたく
# つまり戻り値voidでもFuncで済ましたくて
using System;
class Program {
public static void Main() {
Action<string> a = (s)=>{ Console.WriteLine("{0}ワールド",s); };
a("ヘロー"); // ↓ココ!
Func<string,typeof(void)> f = (s)=>{ Console.WriteLine("{0}ワールド",s); };
f("なるほど ザ・");
}
}
error CS1525: 'string' は無効です。
error CS1525: ',' は無効です。
error CS1002: ; が必要です。
お、おまえは何を言っているのだ!?
# typeof() って静的に解決できるんじゃないのぅ?