일반적으로, 오브젝트 팩토리는 클래스 Node
가 기본 클래스 인 이와 같은 매개 변수없이 등록 기능 맵을 사용오브젝트 팩토리
auto world = ObjectFactory::instance()->create("MatrixTransform");
auto cube1 = ObjectFactory::instance()->create("Cube");
auto sphere = ObjectFactory::instance()->create("Sphere");
호출하여 클래스의 인스턴스를 생성 클래스 MatrixTransform
, Cube
및 Sphere
: 지금
// Map of registered factory functions
std::map<std::string, std::function<Node *(void)>> functionRegistry;
는 I 과부하 파라미터 제한된 수 복용 생성자 (하나 또는 2)과 같은 MatrixTransform(std::string objectName)
등록하고자 또는 MatrixTransform(std::string objectName, glm::mat4 matrixTransform)
, 그래서 내가 호출 할 수 있습니다뿐만 아니라
auto world = ObjectFactory::instance()->create("MatrixTransform");
뿐만 아니라
auto world = ObjectFactory::instance()->create("MatrixTransform", "world");
와 내가 다른 서명을 갖는지도 기능에 저장할 수 있습니다 알고도
auto world = ObjectFactory::instance()->create("MatrixTransform", "world", "glm::mat4())");
의미 서로 다른 매개 변수 및/또는 반환 유형이있는 함수이지만 오버로드 된 생성자와 같이 이름이 다른 시그니처 만 포함하는 함수를 등록하는 방법 여기에서지도의 키가 고유해야하며 따라서 반복 할 수 없다는 점을 고려하면? 필요한 경우 전체 객체 팩토리 코드를 게시 할 수 있습니다. 고맙습니다!
조금 지나치게 설계되지 않았습니까? 공장이 없어도 객체를 직접 생성 할 수 있다는 장점이 있습니까? 당신의 예제에서, 공장이 간단한'auto world = new MatrixTransform (glm :: mat4()) '을 어떻게 치는지 보지 못합니다. 나는 단지'Node *'대신'std :: unique_ptr'를 사용하는 것을 고려할 것이다. –
@Christian Hackl 런타임에 생성해야하는 특정 인스턴스와 동일한 기본 클래스를 공유하는 수많은 클래스가 있으므로 오브젝트 팩토리 패턴을 조사하기 시작했습니다. 그리고 확실히'Node *'대신에'std :: unique_ptr'를 사용할 것입니다. –
LastBlow