이 문제의 이름을 지정하는 방법을 잘 모르겠습니다. 가능한 한 잘 설명하려고합니다.두 가지 객체 유형을 기반으로 올바른 전략 선택
두 개의 다른 개체 유형에 따라 전략을 전환 할 수 있기를 원합니다. 이 작업을하기 위해 개체를 열거 형으로 플래그를 지정하고 이러한 전략 중 '레지스트리'(arrayish)를 갖는 것을 고려하고 있습니다. 이론적으로 올바른 전략은 두 가지 유형 사이의 비트 연산자와 같은 간단한 연산으로 액세스 할 수 있습니다.
이 의사는 내가 이해하기 쉽게 설명하기 위해 노력하고있어 만들 수 있습니다 :이지도를 사용하여 해결하기 쉬운 것입니다
enum Type { A, B, C }
struct Object {
Type type;
}
class ActionRunner {
vector<Strategy> strategies;
void registerStrategy(type1, type2, strategy) {
strategies[type1 operator type2] = strategy;
}
void runStrategyFor(type1, type2) {
strategies[type1 operator type2].execute();
}
}
,하지만 난지도 때문에 배열 또는 벡터를 사용하고 싶습니다 이런 문제에 대한 잔인한 생각처럼 보이고 배열을 사용하는 것은 아마도 훨씬 빠릅니다.
그래서 문제는 올바른 전략의 '위치'를 선택하는 데 사용할 수있는 연산자가 무엇인지 모릅니다. 나는 몇 가지 조합에 대해 생각 해왔다. 그러나 그것들 모두는 결국 어떤 조합에서 다른 조합과 충돌을 일으키는 것으로 보인다.
누구에게도 내가 사용할 수있는 것에 대한 단서가 있습니까?
추신 : 나는 조기 최적화가 좋지 않다는 것을 알고 있지만,이 문제가 간단한 방법으로 해결 될 수 있는지 파악하려고합니다.
------- EDIT -------------------------------------- ----------
답변에 비추어 볼 때, 나는 약간의 여분의 생각을 주었고 나는이 질문으로 의도 한 것이 가능한 방법이 아니라는 결론에 이르렀다. 나는 그것을 원한다. 나는이 문제를 사용하여 지금 풀고 자하는 문제를 다시 진술하려고 노력할 것입니다.
특정 유형의 'BaseClass'개체와 'BaseClass'에서 파생 된 두 개체를 가져 와서 해당 개체에 적합한 전략을 실행하는 '프로세서'개체가있는 클래스 구조가 필요합니다. 이런 식으로 뭔가 :
class Processor {
void run (DerivedA a, DerivedB b);
}
class BaseClass {}
class DerivedA: public BaseClass {}
class DerivedB: public BaseClass {}
BaseClass a = new DerivedA;
BaseClass b = new DerivedB;
processor.run(a, b)
내가 이해에 따르면, 이것은 무엇을하는 것은 '실행'에 매개 변수로 전달되는 경우 내가 예상대로 작동하지 않을 것입니다 차라리 할 거라고 무엇 인 참조입니다. 코드가 너무 복잡하지 않으면이 작업을 수행 할 수있는 방법이 있습니까?
내가 생각하기에 슬레이브 (프로세서) 객체와 결합 된 이중 디스패치와 같은 점을 염두에 두지 만 유지 관리와 확장이 매우 복잡하고 어려울 것으로 보입니다.
감사합니다.
당신은 당신이 더 뭘 하려는지 문구로 사용해 볼 수 있습니까? 어쩌면 예제를 통해 그것을 보여줄 수도 있습니다. – Dukeling