나는 다음과 같은 C++에 불투명 한 물체를 수행하는 방법을 알고 : 불투명 한 물체가 다른 네임 스페이스에서 기존 클래스 템플릿은 포함하지 않고있을 때 그것을 수행하는 방법 이제불투명 객체는
// my_class.hpp
class opaque_object;
class my_class {
my_class();
~my_class();
opaque_object *m_opaque_object;
};
// my_class.cpp
#include <my_class.hpp>
class opaque_object {
// ...
};
my_class::my_class() { m_opaque_object = new opaque_object(); }
my_class::~my_class() {delete m_opaque_object; }
이 헤더 파일. 다음 코드는 좋지 않습니다. 단지 내 문제를 설명하기위한 것입니다.
// my_class.hpp
class third::party::library::opaque_object<
third::party::library::templated_class>;
class my_class {
my_class();
~my_class();
third::party::library::opaque_object<
third::party::library::templated_class> *m_opaque_object;
};
// my_class.cpp
#include <my_class.hpp>
#include <third/party/library/opaque_object.hpp>
#include <third/party/library/template_class.hpp>
typedef third::party::library::opaque_object<
third::party::library::templated_class> opaque_object;
my_class::my_class() { m_opaque_object = new opaque_object(); }
my_class::~my_class() {delete m_opaque_object; }
내 소스 코드의 실제 클래스
훨씬 더 (자체 템플릿 클래스입니다 그들 중 일부와 템플릿의 4 개 인수)이 예보다 템플릿된다.my_class.hpp가 프로젝트의 모든 곳에서 사용되기 때문에 일반적인 컴파일 작업에는 각 cpp 파일에 대해 my_class.hpp를 포함하는 데 5 초가 소요되므로 opaque_object.hpp, template_class를 포함하지 않으려합니다. hpp ... my_class.hpp에 있습니다.
어떻게이 작업을 수행 할 수 있습니까? 모든 의견이나 아이디어는 환영합니다. 미리 감사드립니다.
누군가가 게시물 플래그에 불투명 포인터를 추가 할 수 있습니다 (필자는 자신에게 충분한 평판을 얻지 못했습니다). 미리 감사드립니다! – Phong
이 태그가 더 잘 작동하고 이미 존재한다고 생각합니다. 죄송합니다, dirkgently :) – GManNickG
@GMan : wikipedia에서 pimpl 관용구가 직접 불투명 한 포인터로 리디렉션됩니다! 하지만 "핸들 클래스", "Pimpl 관용구", "컴파일러 방화벽 관용구"또는 "Cheshire Cat"이라고도합니다. (처음으로 내 인생에서 pimpl 관용구에 대해 듣고, 공유 주셔서 감사합니다) – Phong