어떤 C++로 간단한 라이브러리를 만들고 있는데요..! <div><br></div> <div>라이브러리에 정의된 클래스 A,B가 있습니당.</div> <div><br></div> <div>B는 생성자에서, </div> <div><br></div> <div>new A(*this) 를 호출해 멤버 변수로 저장하고 있구, A의 생성자에서 짐작하실 수 있듯이, A역시 B의 reference type을 들고 있는데요..!</div> <div>뿐만 아니라, 멤버변수를 통해 B는 A의 멤버함수를, A는 B의 멤버함수를 호출까지 하고 있습니당.</div> <div><br></div> <div>이때.. 이런 구조로 클래스를 작성하려면, A.h라는 헤더 파일에 A의 선언과 정의를 전부 작성하고 B.h 라는 헤더 파일에 B의 선언과 정의를 전부 작성해선 안되잖아요??</div> <div><br></div> <div>해결 하는 방법은 B 와 A의 선언과 정의를 각각 h파일과 cpp파일로 나누어, 링킹하는 방법이 있을건데요..</div> <div><br></div> <div>제가 만들고픈 라이브러리의 형태는, 따로 static library가 필요한 library가 아닌, header 만 있어도 사용가능하게 하고 싶어서요 ㅠㅠ</div> <div><br></div> <div>불가능 할까요??</div> <div><br></div> <div>요약 : header-only library에서, 서로가 서로의 정의까지 필요한 class 들을 설계할 수 있나요??</div> <div><br></div> <div>이해를 들기 위해 클래스 A랑 B를 잠시 써보면..</div> <div><br></div> <div>A.hpp</div> <div><br></div> <div> <p class="p1"><span class="s1">#ifndef _A_HPP_</span></p> <p class="p1"><span class="s1">#define _A_HPP_</span></p> <p class="p2"><span class="s1"></span><br></p> <p class="p1"><span class="s1">#include </span><span class="s2">"B.hpp"</span></p> <p class="p2"><span class="s1"></span><br></p> <p class="p3"><span class="s1">class</span><span class="s3"> A {</span></p> <p class="p3"><span class="s1">public</span><span class="s3">:</span></p> <p class="p4"><span class="s1"> A(B& b):b_(b) { }</span></p> <p class="p4"><span class="s1"> </span><span class="s4">void</span><span class="s1"> foo()</span></p> <p class="p4"><span class="s1"> {</span></p> <p class="p4"><span class="s1"> b_.foo();</span></p> <p class="p4"><span class="s1"> }</span></p> <p class="p4"><span class="s1"> B& b_;</span></p> <p class="p4"><span class="s1">};</span></p> <p class="p2"><span class="s1"></span><br></p> <p class="p1"><span class="s1">#endif</span></p> <p class="p1"><span class="s1">========================</span></p> <p class="p1"><span class="s1"><br></span></p> <p class="p1"><span class="s1">B.hpp</span></p> <p class="p1"><span class="s1"><br></span></p> <p class="p1"><span class="s1">#ifndef _B_HPP_</span></p> <p class="p1"><span class="s1">#define _B_HPP_</span></p> <p class="p2"><span class="s1"></span><br></p> <p class="p1"><span class="s1">#include </span><span class="s2">"A.hpp"</span></p> <p class="p2"><span class="s1"></span><br></p> <p class="p3"><span class="s1">class</span><span class="s3"> B {</span></p> <p class="p3"><span class="s1">public</span><span class="s3">:</span></p> <p class="p4"><span class="s1"> B() { a = </span><span class="s4">new</span><span class="s1"> A(*</span><span class="s4">this</span><span class="s1">); }</span></p> <p class="p4"><span class="s1"> </span><span class="s4">void</span><span class="s1"> foo()</span></p> <p class="p4"><span class="s1"> {</span></p> <p class="p2"><span class="s1"></span><br></p> <p class="p4"><span class="s1"> }</span></p> <p class="p4"><span class="s1"> A *a;</span></p> <p class="p4"><span class="s1">};</span></p> <p class="p2"><span class="s1"></span><br></p> <p class="p1"><span class="s1"> </span></p> <p class="p1"><span class="s1">#endif</span></p></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.