유형 특성의 개념을 좋아합니다. 명확하고 확장 가능한 방식으로 디자인 문제를 해결하기 때문입니다. 예를 들어 두 개의 프린터 클래스와 문서 클래스가 있다고 상상해보십시오.다른 언어로 된 C++의 형질에 해당하는 기능이 있습니까?
새 문서 유형이 나중에 추가 될 수 있으므로 프린터는 인쇄 할 문서를 직접 알지 않아야하므로 조정할 필요가 없습니다. 반면에 문서는 모든 프린터에 대해 알 필요가 없습니다.
문서를 인쇄하는 방법에 대한 특성을 제공함으로써이 문서는 새 문서를 추가 할 때 수정해야하는 유일한 장소입니다. 또한 새 프린터가있는 경우 동일한 특성을 직접 사용하고 다른 프린터와 다른 내부 인쇄 프로세스에 집중할 수 있습니다.
// Documents
class pdf { /* ... */ };
class txt { /* ... */ };
// Traits
template<typename t>
struct traits; // No default trait, so new documents throw compilation error
template<>
struct traits<pdf> {
static std::string get_title(pdf& document) { /* ... */ }
static std::string get_content(pdf& document) { /* ... */ }
static bool has_images = true;
};
template<>
struct traits<txt> {
static std::string get_title(txt& document) { return ""; } // Not supported
static std::string get_content(txt& document) { /* ... */ }
static bool has_images = false;
};
// Printers
class canon_printer : public printer {
template<typename T>
void print(T document) override
{
std::string title = traits<T>.get_title(document);
// ...
if (traits<T>.has_images)
// ...
}
};
저에게는 강력합니다. 현재로서는이 개념을 C++에서만 보았습니다. 다른 프로그래밍 언어에도 비슷한 개념이 있습니까? 나는 언어의 목록보다는 언어에 독립적 인 용어를 찾고있다.
예 : Java 또는 C#, Document 및 Printer는 인터페이스 또는 추상 클래스이므로 독립적으로 다양 할 수 있습니다. 원하는 답변일까요? – nos
전문화 된 C++ 템플릿이있는 언어를 모르겠지만이 질문에 대답하기 위해 * 모든 * 언어를 열거 할 수 있어야합니다. –
특성 (적어도 이와 유사 함)은 기본적으로 전략 패턴을 구현하지만 런타임 해석보다는 컴파일 시간을 사용합니다. 전략 패턴은 OO를 지원하는 거의 모든 언어로 구현 될 수 있습니다. –