C로 C++ 흉내내는 중에 질문입니다.
글쓴이: cococo / 작성시간: 금, 2006/04/21 - 8:42오후
현재, C++ 로 만들 게 좋을 듯 한 프로그램을 C로 짜고 있습니다. -_-;
(담당자의 요구가, "난 C++을 모르니 C로 짜던가, C++을 가르쳐 주던가" 라고 하는군요.)
그래서 C로 C++을 흉내내 보려고 합니다.
대충 될 것 같아서 해보니...
일단 매크로를 이용해서 생성자(?) 랑 파괴자(?) 를 만드는 것까지는 했습니다. 또...this랑... 멤버 함수 비슷하게 등록하는 거하구요.
그런데, public, private같은 개념을 어떻게 넣어야 할 지 모르겠네요.
혹시 비슷한 작업을 해 보신 분 계시면, 답글 부탁드립니다.
아니면 , 좋은 아이디어라도... -_-;;
그럼, 좋은 주말 보내시기 바랍니다. ^^
Forums:
C 자체에서는 그런 게
C 자체에서는 그런 게 안되죠...
caller가 누군지 아는 방법이 있어야 할듯 하네요.
caller를 직접 구할 수도 없고(RET 확인;;; 플랫폼종속적으로 되잖아요;;;)
caller를 인자로 보내는 방법은 어떨까요?
아니면 아예 인터페이스부와 구현부를 완벽히 분리시킨 후
private될 함수들의 선언을 구현부에"만" 집어넣으시면...
그냥 문서화로 하는게 현실적일 듯.
이 function 들만을 이용해서 정의된 구조체를 사용할 것!!!
라는 주석을 통해서든 따로 문서를 작성하든 하는 것이...
private 과 public 이라는 것이 그냥 compiler 에 의해 자동으로 검출하기 위한 방식이라고 생각하면 굳이 꼭 있어야 하냐는 생각이 듭니다.
그런데 저도 C 로 C++ 와 같은 개념을 효과적으로 표현할 수 있냐는 고민을 좀 해봤었는데 public 상속을 어떻게 해야 할 지 모르겠더군요.
라고 생각했는데...
Search 해보십시요.
아주 많은 글이 나올 겁니다.
일단 상속의 기본은
일단 상속의 기본은 parent의 data를 그대로 가져오는 것입니다. 따라서 다음과 같은 식으로 설계할 수 있습니다.
virtual function의 경우, 해당 struct마다 vtable (함수 포인터 배열)을 만들면 됩니다.
private/public의 경우, 현실적으로 방법이 없습니다. 물론 구조체의 정의를 숨긴 다음, access function만 써서 접근한다던지 하는 방법이 있겠지만, 완벽하지는 않습니다.
꽤 복잡한 코드지만, glib에 포함된 gobject에 대해서 분석해보시면 원하는 답을 얻을 수 있을 겁니다.
GObject Reference Manual
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
오.... 이런 방법들이!!
감사합니다.
생각못한 방법들이 많이 있네요.
사실은 가장 원했던 것은 public이나 private를 위반했을 때
어떠한 형식으로든 에러가 표시되어, 최악의 경우 제 다음 개발자가 문서를 안 읽었다고 하더라도(이런 경우 꽤 있지 않나요? ^^) 그부분이 틀렸다는 것은 알려줄 수 있도록 하려 했던 건데요.
C에선 접근 권한 설정이 불가능하다는 것을 알았다는 것만으로도 큰 도움이 되었습니다. 더 삽질할 필요는 없다는 걸 알게 되었으니까요. 정말 감사드립니다.
말씀해 주신 대로, 문서화로 접근하는 게 시간당 효율이 가장 좋을 것 같습니다. 적당히 함수 이름 짓고, 모든 함수에 접근/변경 함수( Get/Set 계열) 를 만들어 놓으면, 바보가 아닌 이상에야 생각하고 쓰겠죠.
뭐... 문서도 안 읽고 함수 이름을 보고도 감 못 잡는다면... 그땐 그때 다시 생각해 보죠. ㅎㅎㅎ
답변 주신 cinsk, winner, IDNed 님께 감사드립니다.
모두들 좋은 하루 되세요. ㅎㅎㅎ
행복은 희생없이는 얻을 수 없는 것인가?
시대는 불행없이는 넘을 수 없는 것인가?
댓글 달기