스왑 가능한 해시 함수가있는 해시 테이블을 정의하고 싶습니다. 해시 기능과 같이 int로 반환 해시되는 해시 테이블과 키에 대한 포인터를 취할 것입니다 :C에서 함수 포인터의 typedef에 대한 순환 참조
typedef int (hash_function_t) (hashtable *, int);
을 어디에 해시 테이블에 저장 키를 해시하는 데 사용되는 함수에 대한 포인터 :
typedef struct ht {
size_t size;
...
hash_function_t *hash_function;
} hashtable;
불행하게도 이것은 순환 참조를 만듭니다.
해시 함수 정의에서 해시 테이블에 대한 포인터가 필요하므로 해시 테이블 크기에 대한 모듈러스를 수행 할 수 있으므로 최대 수의 버킷을 지나치지 않습니다. 해시 함수 포인터가 모든 곳을 통과 할 필요가 없도록 해시 함수가 필요합니다.
나는이 같은 코드로 이어질 것입니다 실현 : 약간 이상한*ht->hash_function (ht, key)
,하지만 난 그와 괜찮아.
typedef를 순서대로 넣지 않아도 작동하지 않습니다. 해시 테이블에서 긴 정의를 사용하고 나중에 typedef를 수행해야합니까, 아니면 더 좋은 방법이 있습니까?
이것은 모두 똑 바른 C, C++이 아닙니다. ANSI C 솔루션이 선호됩니다!
Hah! 좋고 간단합니다. 당신이 구조체를 선언하고 다시 선언 할 수 있다는 것을 몰랐습니다. 매우 감사합니다! – majelbstoat
이제 해보세요! :-) 나는 C 언어를 배우고 링크 된 목록을 구현할 때 같은 문제가 발생했습니다 ... –