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() って静的に解決できるんじゃないのぅ?
Visual Studio 2010(只今β2)、C++のインテリセンスがめっちゃ賢くなってます。
裏でC++パーサとSQLServerぶん回して単語帳をわしわしこしらえてらっしゃるらしい。
がっ! 一方でC++/CLIではインテリセンスがOFFですよOFF! なにひとつ教えてくれねぇ。
おそらくは.NETのメタ情報とパース結果の両方をすり合わせにゃならんのがキツいからかなーと。
あまりに悲しかったのでConnectに嘆願しました。 → ココ。是非ともVoteよろしく。
ほどなくしてお返事をいただきました:
貴重なフィードバックのご提供にお時間を割いていただき、ありがとうございます。 C++/CLI で IntelliSense が使えないことに起因する問題に関しまして、私たちは、επιστημη さんのお気持ちをお察しいたします。 残念ながら、これは、Visual Studio 2010 の RTM 版でも対応されない予定です。 私たちは、次期公開アップデートまたは (Visual Studio 2010 の RTM 版後以降の) リリース版で C++/CLI に IntelliSense 機能を追加できるように取り組む予定です。 ご迷惑をお掛けして申し訳ございませんが、よろしくお願いいたします。
…お願いしますよ。たのんますよホント。