2011-01-01 5 views

답변

3

당신은 대리자를 구축하고이를 호출하여 전화를 강제 할 수

binarySize(MyClass myObject) { ... } 

아직 D 컴파일러에 추가되지 않은 특징은과 같이이 호출 할 수있는 기능입니다. 보낸 사람 :

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이 책은 내 책의 해킹이며 일부 유형의 경우 문제가 발생할 것입니다.

+0

Ohhhhhhh 그래서'fnptr'을 다음과 같이 사용할 수 있습니다. * 그게 내가 찾고있는 것입니다! 고맙습니다! – Mehrdad

+0

@ 램버트 : BTW, 그것은 "funcptr"라고 쓰여 있습니다 : http://www.digitalmars.com/d/1.0/function.html#closures 제 잘못입니다. – BCS

+0

오, 고마워. – Mehrdad

0

typeof(this).myfunc() 클래스 인스턴스 함수를 사용하면 비 가상 호출을 할 수 있습니다. 가상 클래스를 외부 클래스에서 가상으로 호출해야하는 경우 호출을 래핑 할 클래스에 새로운 (최종) 메서드를 추가 할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 불행히도 문제는 클래스 외부에서이 작업을해야한다는 것입니다. 클래스에 위와 아래로 작동하는 매우 일반적인 코드가 있기 때문에 클래스에 새로운 메서드를 추가 할 수는 없습니다. 그 특정 레벨에 대한 계층 구조의 모든 레벨에서'object.binarySize() '라고 말할 수 있으며, 실용적이지 않기 때문에 모든 클래스에 대해 각 레벨마다 다른 함수를 추가 할 수는 없습니다. (Mixins도 도움이되지 않습니다.) – Mehrdad

1

원하는 동작이 아닌 경우 다형 클래스 메서드를 사용하는 이유가 있습니까? 또한 클래스 외부에서 무엇을 의미하는지 확신 할 수 없습니다 (객체의 인스턴스없이 멤버 함수를 호출하겠습니까?).

내가해야 할 일은 첫 번째 매개 변수로 개체를 가져 오는 일반 함수를 작성하는 것입니다.

myObject.binarySize(); 
+0

답장을 보내 주셔서 감사합니다! 나는 * 때때로 * 필요하기 때문에 다형성 메서드를 사용하고 있지만 때로는 그렇지 않습니다 - 각 경우에 대해 두 가지 동작이 모두 필요합니다. (아, 그리고 클래스 밖에서, 나는 외부 코드를 의미한다.) 'object'에 의해 나는 당신이'myObject'를 의미한다고 가정한다. 맞습니까? 이게 도움이 될지 모르겠지만 그걸 살펴볼 것입니다. 감사. – Mehrdad

+0

@Lambert, 나는 binarySize 함수 내에서 코드가 아니기 때문에 객체를 사용 했으므로 변수 이름이 될 수 있습니다. 나는 당신이 다형성 행동이 클래스 메소드를 호출하기를 원한다면 이것이 최선의 선택이라고 생각한다. 그렇지 않으면 비 다형성 함수를 호출해야한다. 클래스 외부에서 메소드를 추가하는 것은 불가능합니다. –

+0

좋습니다. 고마워요! – Mehrdad

관련 문제