D中的非多态调用实例方法?

时间:2011-01-01 16:53:47

标签: polymorphism invoke d instance-methods

如何从外部对象的类中静态调用实例方法的特定定义,以便在特定用途中禁止多态? (换句话说:我需要相当于Visual Basic.NET的MyClass,但是从外面开始。)

3 个答案:

答案 0 :(得分:3)

您可以通过构建委托并调用它来强制进行调用。来自记忆:

void delegate(int, float) dg;

dg = &t.theFunction;  // gives the function for the dynamic type
// OR
dg.ptr = t;  // gives the object

dg.funcptr = &typeof(t).theFunction; // gives the function for the static type 

dg(1,3.1415);

OTOH这是我书中的一个黑客,对某些类型肯定会引起问题。

答案 1 :(得分:1)

如果不是您想要的行为,是否有理由使用多态类方法?我也不确定你在课堂外的意思(你想在没有对象实例的情况下调用成员函数)吗?

我会假设你应该做的是编写将对象作为第一个参数的普通函数。

binarySize(MyClass myObject) {  ... }

尚未添加到任何D编译器的功能是能够像这样调用它:

myObject.binarySize();

答案 2 :(得分:0)

您可以在类实例函数中使用typeof(this).myfunc()进行非虚拟调用。如果你需要从外部类非虚拟地调用虚方法,你可以将新的(最终)方法添加到将包装调用的类。