D 如何将ref/out函数指针传递给函数?

D 如何将ref/out函数指针传递给函数?,d,dmd,D,Dmd,我想实例化一个函数指针: 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)。我试着使用对象,

我想实例化一个函数指针:

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)
。我试着使用
对象
,但显然
函数
不是
对象(为什么??)。那么,如何将
函数
作为
ref
/
变量传递出去(不使用
模板
/
混合
,这会模糊代码并迫使我添加许多
类型的
语句……?

没有称为
函数的类型。函数必须指定返回类型和参数类型,如
int function(double,string)
。如果您想支持任何类型的函数,请使用


是的,就是这样:-)但是你所说的“没有叫做
函数的类型”
“是什么意思?有“函数指针”,如:
对象函数(int)MyFunc;MyFunc=MyOtherFunc
不是吗?@Tal:是的,但是类型是
对象函数(int)
,不是
函数
。好的,我知道了。它是
还是
参考
类型?它不继承任何其他类型,就像(例如,
classx
继承
Object
)一样?@Tal:它是一个值类型,不继承任何内容。继承只对类有意义。@Tal,正确。它不是任何事物所固有的。在大多数情况下,它们具有值语义。你可以认为它是不透明的值BLB,或者是指向一个不可变的不透明小块的指针。虽然从技术上讲,它是一个“指向函数的指针”,但据我所知,您无法对取消引用的函数执行任何操作(可移植)。
static void GetProc(T)(out T f) if (isFunctionPointer!T) 
  ...