如何从外部对象的类中静态调用实例方法的特定定义,以便在特定用途中禁止多态? (换句话说:我需要相当于Visual Basic.NET的MyClass
,但是从外面开始。)
答案 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()
进行非虚拟调用。如果你需要从外部类非虚拟地调用虚方法,你可以将新的(最终)方法添加到将包装调用的类。