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