2012-01-10 15 views
3

私は、関数ポインタインスタンス化したい:ref/out関数ポインタを関数に渡すには?

static void GetProc (out function f) { 
    auto full = demangle(f.mangleof); 
    auto name = full[full.lastIndexOf('.')+1..$]; 

    f = cast(typeof(f)) GetProcAddress(hModule,name.toStringz); 
} 

をしかし、コンパイラは、私は、関数型の変数(out function f)を使用せません。私はObjectを使ってみましたが、明らかにfunctionObjectではありません。だから、functionref/outという変数に渡すにはどうすればいいですか?(template/mixinを使用せずに、コードを隠して多くの文を追加します...)?

答えて

7

functionと呼ばれるタイプはありません。関数は戻り値の型と引数の型をint function(double, string)のように指定する必要があります。あなたはtemplate

static void GetProc(T)(out T f) if (isFunctionPointer!T) 
    ... 
+0

うんを使用し、機能のいずれかの種類をサポートしたい場合は、それが:-)方法ですが、あなたは「'function'と呼ばれる全くタイプがありません」とはどういう意味ですか?次のような "関数ポインタ"があります: 'Object function(int)MyFunc; MyFunc = MyOtherFunc; 'それじゃない? – Tar

+1

@Tal:はい、タイプは 'function'ではなく' Object function(int) 'です。 – kennytm

+0

O.k、そうです。それは 'value'か' reference'型ですか? (例えば) 'クラスX'が' Object'を継承するのと同じように、他の型を継承しませんか? – Tar

関連する問題