C의 매개 변수로 여러 매개 변수가있는 함수에 대한 포인터를 받아들이고 호출하는 방법은 무엇입니까?

로낙 샤르마

해시 맵 API를 만들고 있습니다. 이 API hashmap_new()에는 새 해시 맵을 만드는 함수가 있습니다 (생성자처럼 작동 함). 사용자가 자신의 해시 함수에 대한 포인터를에 대한 인수로 제공 할 수 있도록 지정할 수 있기를 바랍니다 hashmap_new().

내가 직면 한 문제는이 사용자 정의 해시 함수가 임의의 수의 인수를 가질 수 있으며 임의의 순서로도 가질 수 있다는 것입니다. 예를 들어, 일부 해시 함수는 인수로 데이터 만 필요로하고, 일부는 데이터와 길이를 필요로하는 반면 다른 해시 함수는 데이터, 길이 및 시드를 필요로합니다.

내 코드는 다음과 같습니다.

struct hashmap *hashmap_new(int capacity, uint64_t (*hash_fn)(const void *key, uint64_t len))
{
  ... // code for allocation and setting other variables
  map->hash_fn = hash_fn;

  return map;
}

내지도에 대한 해시 함수를 설정 한 후 필요할 때마다 내 코드의 다른 부분에서 호출하고 싶습니다. 어떻게 쓸 수있는 hashmap_new()인수의 수를 받아 어떻게 인수의 많은 수가 그 함수를 호출 할 수 해시 함수에 대한 포인터를 받아 기능을?

dbush

단일 void *인수 를 사용하도록 해시 함수를 선언하십시오 . 그런 다음 각 함수에 대해 해당 해시에 대한 매개 변수를 포함하는 구조체를 정의하고 함수 내에서 void *를 적절한 구조체 유형에 대한 포인터 로 변환합니다 .

나중에 해시 함수를 호출 할 때 적절한 구조체의 인스턴스를 채우고 해당 구조체에 대한 포인터를 함수에 전달합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관