나는 런타임 중에 어떤 상위 API를 사용할 것인지 결정하고, 많은 추상 클래스를 가지고 있고, 상위 API마다 파생 클래스와 컨텍스트 클래스를 가지고있다. 이 코드가 덜 추한 것이 가능하다, 그런다형성과 새로운 연산자 [C++]
Mesh* genMesh(data d) { if(m_useA_API) return new A_mesh(d); else return B_mesh(d); }
뭔가, 지금 질문입니다 :하는 (예를 들어) 함수를 사용하여 작업에 대한 올바른 파생 클래스로 날을 제공? 컨텍스트 클래스 내에서 메서드를 사용하는 대신 기본 클래스에서 new 연산자를 재정 의하여 적절한 파생 클래스 인스턴스를 반환 할 수 있습니까?
그렇지 않은 경우 가능한 해결책은 무엇입니까?
TL; DR이 내가
Mesh* m = new Mesh(data); // and the base class decides which derived class to use instead of the Context class.
감사를 수행하고 싶은 것입니다.
new 연산자는 원시 저장소 할당을위한 것입니다. 공장 기능을위한 고리가 아닙니다. – StoryTeller
네, 그 이유는 내가 stackoverflow 도움을 왔어, 새로운 메모리 블록을 반환, 나는이 문제에 대한 해결책이 있는지 찾고 있어요. – ABOODYFJ
질문에 대한 해결책은 없습니다. 공장을보다 효과적으로 구현하기위한 다양한 접근법과 디자인 패턴이 있습니다. 그러나 'Mesh * m = new Mesh (data)'가'Mesh '에서 유래 된 어떤 클래스의 인스턴스를 가리키는'm '이되게하는 해결책은 없습니다. 정의에 따르면'new' 표현식은 파생 클래스가 아닌'Mesh' 인스턴스를 생성합니다. – Peter