최근 Java에서 많은 프로그래밍을 해왔습니다. 이제는 C++ 루틴으로 되돌아갑니다 (실제로 포인터와 세그먼트 오류가 누락되기 시작했습니다). C++가 템플릿을 광범위하게 지원한다는 것을 알고 있다면 일반화 된 코드 작성에 유용 할 수있는 Java의 기능을 가지고 있는지 궁금합니다. 두 개의 클래스 그룹이 있습니다. 그 중 하나에는 first()
메서드가 있고 다른 메서드에는 second()
메서드가 있습니다. 클래스가 소유하고있는 메소드에 따라 컴파일러가 선택한 템플릿을 전문화하는 방법이 있습니까?메소드를 기반으로하는 특수 템플릿
public class Main {
public static void main(String[] args) {
First first =() -> System.out.println("first");
Second second =() -> System.out.println("second");
method(first);
method(second);
}
static <T extends First> void method(T argument) {
argument.first();
}
static <T extends Second> void method(T argument) {
argument.second();
}
}
경우 First
및 Second
는 인터페이스입니다 : 나는 자바의 하나와 유사한 행동을 목표로하고있다. 상위 클래스에서 각 그룹을 파생시킴으로써이 두 그룹을 그룹화 할 수 있지만, 항상 가능하지는 않습니다 (C++에서는 autoboxing이없고 일부 클래스는 공통 조상으로부터 상속받지 않음).
좋은 예는 STL 라이브러리입니다. 일부 클래스는 push()
과 같은 메서드를 사용하고 다른 일부 메서드는또는 push_back()
입니다. 여러 변수를 사용하여 여러 값을 컨테이너에 삽입해야하는 함수를 만들고 싶습니다. Java에서는 콜렉션에 공통 조상이 있으므로 쉽게 수행 할 수 있습니다. 반면에 C++에서는 항상 그런 것은 아닙니다. 나는 오리 입력하여 그것을 시도하지만, 컴파일러는 오류 메시지를 얻을 :
template <typename T>
void generic_fcn(T argument) {
argument.first();
}
template <typename T>
void generic_fcn(T argument) {
argument.second();
}
그래서 내 질문은 : 모든 단일 사건을 전문으로 불필요한 boileplate 코드를 만들지 않고 가능한 그런 행동을 구현되어 있습니까?
당신은 다른 템플릿 매개 변수로 정책 클래스를 사용하고, 그것으로부터 상속 할 수 있습니다. 그런 다음 여러 컨테이너 유형에 대한 정책 구현이 있습니다. 또한 [정책 기반 디자인] (https://en.wikipedia.org/wiki/Policy-based_design)을 참조하십시오. –
이것이 어떻게 문제를 해결할 수 있는지 예를 보여줄 수 있습니까? 시도할만한 가치가있는 것 같기 때문에. –
wikipedia 기사에 샘플이 있습니다.이 단어를 검색하면 더 많은 것을 찾을 수 있습니다. –