최근 C++ 개발로 시작했습니다. 나는 다음과 같은 것이 가능한지를 모르고 있기 때문에 내가 해결할 수없는 문제에 봉착했다.C++ 클래스를 숫자로 매핑
숫자와 클래스 사이의 매핑을 만들고 싶습니다.이 매핑은 추상 클래스에서 파생되었습니다.
기본적으로 내가하고 싶은 것은 해당 클래스와 관련된 주어진 숫자를 기반으로 클래스의 새 인스턴스를 만들 수있는 팩토리 메서드를 만드는 것입니다.
나는 다음을 수행 할 수 있음을 알고 ...
Vehicle *Vehicle::from_type(byte type)
{
switch(type)
{
case 0x00: return new Bicyle();
case 0x01: return new Car();
...
case 0x10: return new Truck();
}
return null;
}
...,하지만 난 차라리하지 내가 DRY를 유지하려는있다.
그것은이 일이의 라인을 따라 뭔가를 할 수있는 방법 :
// I know this is incorrect syntax
const map<byte, class extends Vehicle> VEHICLE_MAPPING = {{0x00, Bicyle}, {0x01, Car}, ..., {0x10, Truck}};
Vehicle *Vehicle::from_type(byte type)
{
return new VEHICLE_MAPPING[type]();
}
첫 번째가 DRY를 위반하는 경우 두 번째도 DRY를 위반합니다. 나는 첫 번째 해결책을 고수 할 것입니다. – Fureeish
첫 번째 해결책은 충분히 건조하고 두 번째는 제 지식으로는 불가능합니다. 스마트 포인터에 대해 읽어야한다고했는데, 코드가 오래된 것 같습니다. – papagaga
파생 클래스마다 팩토리 클래스가 필요할 것 같습니다. 다음은지도에서 설정할 수 있습니다. 나는 그것이 당신에게 좋은 생각인지 모른다. 예라고 대답하면 몇 가지 코드를 제공 할 수 있습니다. – BartekPL