2013-09-03 2 views
2

저는 게임 엔진을 코딩 중이며 꼭지점, 텍스처, 글꼴 등과 같은 리소스 기본 클래스를 만듭니다.C++ 공용 클래스를 숨기려면 어떻게해야합니까?

이제 다른 프로그래머에게 공개하고 싶은 몇 가지 기본 클래스를 만들고 있습니다. 이미지 (텍스처 사용), 텍스트 (글꼴 사용), 모델 (정점 사용) 등과 같은 기본 클래스를 사용합니다.

게임 엔진도 노출되어 게임을 코딩 할 때 사용할 수 있습니다.

하지만 나는 그들이 기본 클래스에 전혀 액세스하지 못하도록하고 싶습니다. 클래스 클래스와 충돌하지 않기를 바랍니다. 예를 들어, 뭔가 부딪 치기 위해 "Material"이라는 클래스를 만들고 싶지만 내 리소스에 이미 "Material"클래스가 있습니다. 어떻게 충돌을 피할 수 있고 더 나은지,이 기본 클래스를 숨길 수 있습니까 (그래서 그들은 엉망이되지 않습니다) 그걸로 뭔가를 깰)?

편집 : 예 : 노출 된 클래스 이미지이 있습니다. 여기에는 쿼드텍스쳐 기본 클래스가 포함되어 있으며 리소스 관리자는 항상로드 된 하나만 있는지 확인하여 메모리에 중복 된 텍스처/쿼드가 없는지 확인합니다.

텍스처 자체는 너비/높이를 가지고 있으며 카드에로드 된 데이터를 관리합니다. 쿼드과 동일합니다.

이미지 이미지 크기 조정이 요청되면 변경해야하는 모든 항목이 변경되고 데이터가 카드에 다시 업로드됩니다. 그들은 거의 모든 곳에서 사용하고 있기 때문에

텍스처쿼드는 모듈과에 효과를 적용 할 몇 가지 클래스가있다, 공공있다.

그들은 (다른 프로그래머는) 상속, 인스턴스로 이미지를 사용하거나 그 자체를 관리하고 그들도 모르는, 그래서 나는 만이 이미지 클래스 노출 원하기 때문에 구성원으로하는 있을 수 있습니다 QuadTexture 클래스이며 클래스 네이밍에도 간섭하지 않습니다.

+1

생성자 또는 소멸자를 공개 또는 비공개로 숨길 수 있습니다. 적어도 (불법적 인) 인스턴스화를 막을 것입니다. –

+0

물건을 비공개로 설정하고 공개 게터와 설정자를 사용 하시겠습니까? – progrenhard

+5

[네임 스페이스] (http://en.cppreference.com/w/cpp/language/namespace) – Blastfurnace

답변

6

첫 번째 (가장 쉬운 방법)은 라이브러리의 모든 개체를 특정 네임 스페이스에 묶는 것입니다.

그러면 좀 더 복잡해집니다. 봉쇄를 통해 단순히 "내부 클래스"를 사용하는 "공용 클래스"를 내보내는 경우에는 전달 선언을 사용하여 수행하고 사용하는 "개인 클래스"에 대한 포인터를 유지할 수 있습니다. 이것은 행동에 대해 수행 할 수 있으며, 여기에 pimpl idiom

를 사용하여 속성을 예입니다 :

namespace Foo 
{ 
    class BarImpl; 

    class Bar 
    { 
    // ... 
    private: 
     std::unique_ptr<BarImpl> object_; 
    }; 
} 

그러나, 귀하의 "공개 수업"(중, 직접 봉쇄를 통해 "개인 수업"의 정의가 필요한 경우 또는 상속) 실제 라이브러리 (출처 :)를 사용자에게 제공하는 좋은 방법은 해당 지원 클래스에 "쉬운"액세스를 제공하지 않는 것입니다.

관련 문제