我在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
的类,就不行了,但总比
啥也没有好.