내 응용 프로그램에서 간단한 "파이프 및 필터"유형 아키텍처를 구현하려고합니다. 하나의 입력과 하나의 출력 유형 매개 변수를 갖는 모든 필터에 대해 공통 기본 클래스를 갖게됩니다. 모든 필터에 대해 다음 필터를 등록하므로 간단한 체인을 형성합니다. 하나의 작은 문제가 있습니다 : 어떻게 다음 필터의 출력 유형을 유형 매개 변수로 표시해야합니까 (예 : 프롤로그에서 _)? 다음 객체의 입력은 현재 필터의 출력과 일치해야하지만 현재 필터는 출력 유형을 알지 못합니다. 다음 필터의).C++에서 사용되는 임의의 템플릿 매개 변수 일 수 있습니까?
class IFilter
{
std::auto_ptr<TIn> params;
IFilter *nextFilter;
public:
typedef TIn TInType;
typedef TOut TOutType;
void SetParams(std::auto_ptr<TIn> param) { ...irrelevant code... }
virtual void Execute() = 0;
void Register(IFilter<TOutType, ???> *filter) { ...irrelevant code... }
};
긴 체인을 원하십니까? 그렇다면 다른 필터를 사용하여 필터를 작성하면 유형이 변경되므로 결과는 다른 값이어야합니다. 또는 A = B라는 필터와 B-> C라는 필터를 가지고 있다면 그 결과는 A-> C입니다. 등록이 filter2s 입력을 filter1 입력에 후크하는 경우 새 값이 필요하지 않습니다. 다음 질문 : 추상 인터페이스가 필요합니까, 아니면 충분히 좋은 패턴입니까? 암묵적인 변환은'double'을'int'로 바꾸는 것이 어떻습니까? 당신은 신경 쓰지 않습니까, 차단하고 싶지 않습니까? – Yakk