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)
...