我在betterC模式下自定义了object.d并创建了新(NEW)模板,使用模块,似乎可在没有extern(C++)模式时创建类,且调用函数中的转换类型似乎工作正常.
但是当析构时没有找到调用相应子类的__xtdor()方法,是否可正确执行__xtdor()?
我只是定义了一个空的对象类,在编译时选择object.d文件,就可用该类了,函数参数也可用接口.
析构函数没找到正确的子类对象.
以下是亚当的:这里
特别在此:
cpp
void destroy(bool initialize = true, T)(T obj) if (is(T == class))
{
(..)
else
{
//绕过重载opCast
auto ptr = (() @trusted => *cast(void**) &obj)();
rt_finalize2(ptr, true, initialize);
}
}
对接口:
cpp
cast(Object)obj
但我怀疑你必须实现整个typeinfo.
不幸,D的类不能有虚析构器,因此在运行时,只能用TypeInfo来找到正确的子类析构器.
最好实现自己的虚析构器,及知道如何调用它们的析构(destroy)函数;如:
cpp
interface BettercDestructible
{
void destruct() nothrow @nogc;
}
class MyClass : BettercDestructible
{
//...
override void destruct()
{
//析构器实现在此
}
~this() { this.destruct(); }
}
void destroy(BettercDestructible obj)
{
obj.destruct();
}
当然,对未实现BettercDestructible的类,就不行了,但总比啥也没有好.