2012-12-17 2 views

답변

1

파라 다형성이 정의 복용 : 필요한

메커니즘을 명시 적으로 또는 암시 구체적인 유형과 형태 변수를 대체한다.

void *이 맞지 않습니다.

C는 매크로로 수행 할 수 있습니다. http://rosettacode.org/wiki/Parametric_polymorphism#C

5

아마도 메커니즘이 "너무 정비공"이기 때문에 다형성이 유용 할 것이라는 점에서 유용하지 않게 될 것입니다.

사실 이후에 다형 함수를 쉽게 확장 할 수있는 방법이 없기 때문에.

C++에서

, 당신은 사소하게이 작업을 수행 할 수 있습니다 :

C에서
Matrix4x4 a, b, c; 

a = ...; /* Initialize matrices. */ 
b = ...; 
c = a + b; /* Use overloaded (polymorphic) operator + to add. */ 

는 ++, 위가 Matrix4x4 클래스에 정의 된 operator+()를 사용하고, 컴파일 할 때 것을 결정할 수있다. 따라서 새 데이터 유형을 추가 할 때 기존의 + 이름을 사용하여 추가하는 방법을 설명하는 관련 코드가 추가됩니다. C에서는 그렇게 할 수 없습니다. 당신이 함수

void super_add(void *sum, const void *a, const void *b); 

했다하더라도 C에서

, 어떻게 방금 유형을 쓴 경우에 대한 Matrix을, 그것을 알 수 있습니까? '당신에게 다음

void super_add_register(const char *sum_type, const char *atype, const char *btype, void (*adder)(void *sum, const void *a, const void *b)); 

: 당신은 몇 가지 일반적인 유형 설명 시스템이해야 할 것입니다 : 당신이 할

void super_add(const char *sum_type, void *sum, const char *atype, void *a, const char *btype, const void *b); 

가 등록-메커니즘의 형태를 제공하기 위해, 그래서 당신은 새로운 기능을 추가 할 수 있습니다 올바른 추가 기능과 계속해서 형식 이름을 일치시키는 코드를 구현해야합니다.

간단히 말해서, 일반적으로 그럴 가치가 없습니다. 그러나 많은 것을 수행하는 라이브러리가 있습니다 (예 : GObject).

관련 문제