void *로 C 프로그래밍에서 매개 변수 다형성을 구현할 수 있다고 말하는 것이 맞지 않습니까?C 프로그래밍 : void * - 매개 변수 다형성을 사용하지 않는 이유는 무엇입니까?
교수는 질문을 제기했지만 결코 대답하지 않았습니다. void *는 사실 파라 메트릭 다형성으로 간주 될 수있는 매우 낮은 수준이지만 거기에는 더 강력한 이유가 있습니까?
void *로 C 프로그래밍에서 매개 변수 다형성을 구현할 수 있다고 말하는 것이 맞지 않습니까?C 프로그래밍 : void * - 매개 변수 다형성을 사용하지 않는 이유는 무엇입니까?
교수는 질문을 제기했지만 결코 대답하지 않았습니다. void *는 사실 파라 메트릭 다형성으로 간주 될 수있는 매우 낮은 수준이지만 거기에는 더 강력한 이유가 있습니까?
파라 다형성이 정의 복용 : 필요한
메커니즘을 명시 적으로 또는 암시 구체적인 유형과 형태 변수를 대체한다.
void *
이 맞지 않습니다.
C는 매크로로 수행 할 수 있습니다. http://rosettacode.org/wiki/Parametric_polymorphism#C
아마도 메커니즘이 "너무 정비공"이기 때문에 다형성이 유용 할 것이라는 점에서 유용하지 않게 될 것입니다.
사실 이후에 다형 함수를 쉽게 확장 할 수있는 방법이 없기 때문에.
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).