구조체 멤버 변수 이름을 함수의 인자로 전달할 수 있나요?
글쓴이: ShaYEL / 작성시간: 금, 2014/03/14 - 7:00오후
흔히 사용하는 list 데이터 구조 라이브러리가 정의되어 있다고 가정합니다.
struct test { int a; int b; struct list_elem elem; }; void function(struct list_elem *e1, struct list_elem *e2, void *aux) { struct test t1 = list_entry(e1, struct test, elem); struct test t2 = list_entry(e2, struct test, elem); /* 이 부분에서 전달받은 aux를 이용하여 t1과 t2 구조체의 a값을 비교할 것인지 b값을 비교할 것인지 결정할 수 있어야 합니다. */ }
위 코드에서 aux를 이용해 a나 b 멤버변수를 깔끔하게 전달할 수 있을까요?
물론 aux값으로 0 또는 1을 전달해서 그 값에 따라 a인지 b인지 결정하는 식의 방법도 있을 수 있겠지만 좀 더 일반적인 방법을 원합니다..
Forums:
이름을 전달할 수 있는 법은 모르겠지만
이름을 전달할 수 있는 법은 모르겠지만 offsetof() 매크로로 두 멤버의 오프셋을 알 수 있으니, aux 자리에는 그 오프셋을 넘겨주는 건 어떨까요.
좀 더 덧붙여서 이 오프셋을 배열에 넣어두거나 하면 호출할 때는 offsetof(..)대신 0, 또는 1, 아니면 심지어 'a', 'b' 를 인자로 줄 수도 있긴 하겠습니다만..
저렇게 캐스팅하고 역참조하느니 그냥 본문에 쓰신 대로
이게 나을 것 같기도...;;;
좋은 하루 되세요!
변수이름은 first class가 아니므로
변수이름은 first class가 아니므로 불가능합니다
> 물론 aux값으로 0 또는 1을 전달해서 그 값에
> 물론 aux값으로 0 또는 1을 전달해서 그 값에 따라 a인지 b인지 결정하는 식의 방법도 있을 수 있겠지만
이게 일반적인 방법 아닌가요?
아니면 그냥 a를 비교하는 함수와 b를 비교하는
아니면 그냥 a를 비교하는 함수와 b를 비교하는 함수를 만들어 함수 포인터를 전달해 주세요.
...
C라면 위의 댓글처럼 offsetof를 추천드리고요, 혹시 C++이 가능하다면 pointer to member 연산자 (.*, ->*)를 쓰면 깔끔하게 해결할 수 있습니다.
http://stackoverflow.com/questions/670734/c-pointer-to-class-data-member
+1
+1
저는 이렇게 생각했습니다.
0, 1보다 의미있는 이름을 쓰려면 enum이나
0, 1보다 의미있는 이름을 쓰려면 enum이나 #define을 쓰면 됩니다.
댓글 달기