이것은 XY 문제와 같습니다. 당신은 당신이 원래의 문제에 대한 해답이 될 수도 있고 그렇지 않을 수도있는 일을하려는 특정 해법을 가지고 있습니다. 또한 예에서 new
의 사용이 불완전한 경우 Class
개체를 해제하는시기와 방법이 명확하지 않습니다.
struct IConfig {
// TODO: identification as to which class instance this is.
// and/or virtual methods
int a;
int b;
virtual ~IConfig(){}
};
struct ConfigA : public IConfig {
int c;
virtual ~ConfigA(){}
};
struct ConfigB : public IConfig {
int d;
virtual ~ConfigB(){}
};
class IClass {
// TODO: identification as to which class instance this is.
// and/or virtual methods
virtual ~IClass(){}
};
class ClassA : public IClass {
public:
ClassA(const IConfig & iconf) {
ConfigA & aconf = dynamic_cast<ConfigA&>(iconf);
}
virtual ~ClassA(){}
};
class ClassB : public IClass {
public:
ClassB(const IConfig & iconf) {
ConfigB & bconf = dynamic_cast<ConfigB&>(iconf);
}
virtual ~ClassB(){}
};
class App {
IConfig * config; // in case
IClass * cls;
void initial(IConfig config){
if(cond1)
cls = new ClassA(config);
else if(cond2)
cls = new ClassB(config);
else
// ...
}
};
그냥 cond1
가 전달되는 IIF IConfig
사실 일 것 같은 솔루션을해야합니다 : (여전히 작업이 필요하지만 그것은 시작이다) 같은 것을 - 인터페이스 패턴을 사용하는 것이 좋습니다 말했다
initial
은 생성되는 클래스와 일치하는 ConfigA
입니다. 인터페이스 자체에 문제가 없는지 확인하기 위해 더 많은 검사를 추가 할 수 있습니다. 상수를 반환하는 가상 메소드는 충분히 좋지만 실제로는 이미 지저분한 접근처럼 보이기 때문에이 작업을 수행 할 때 수행하려는 작업에 따라 달라집니다. 등을 차례로 구성 클래스를 사용해야 결정하는
군더더기를로드 할 클래스 - - 당신이 경우에 할 수 있습니다
예는 아마도 IConfig
의 로컬 설정은 모두 결정하는 데 사용할 수 있습니다 각 Class
에 IConfig
의 자체 구현이 있으므로 App
(IConfig
데이터 사용)을 통해 만들 클래스를 결정할 수 있습니다. 다시 말하지만, 당신이이 구조로 달성하고자하는 것을 알지 못하면 (다른 것과는 반대로) 아무도 확실히 말할 수 없습니다.
무엇이'cond1'과'cond2'입니까? 'classA'와'classB' 클래스를 만들었습니까? 그 (것)들을 누설하게하십시오 좋은 선택 같이 소리가 나지 말라. – skypjack
그것은 불완전한 부호이다. 일부 설정 브랜치가 있음을 의미합니다. 분기는 ConfigA 내에서 계속 될 수 있습니다. – Alfred
[mvce] (http://stackoverflow.com/help/mcve)를 제공하십시오. – skypjack