Programing

템플릿 typedefs-해결 방법은 무엇입니까?

lottogame 2020. 10. 30. 07:40
반응형

템플릿 typedefs-해결 방법은 무엇입니까?


C ++ 0x에는 템플릿 별칭 (템플릿 typedef라고도 함)이 있습니다. 를 참조하십시오 여기 . C ++의 현재 사양은 그렇지 않습니다.

해결 방법으로 무엇을 사용하고 싶습니까? 컨테이너 개체 또는 매크로? 그만한 가치가 있다고 생각하십니까?


해결 방법으로 무엇을 사용하고 싶습니까? 컨테이너 개체 또는 매크로? 그만한 가치가 있다고 생각하십니까?

표준적인 방법은 다음과 같은 메타 함수를 사용하는 것입니다.

template <typename T>
struct my_string_map {
    typedef std::map<std::string, T> type;
};

// Invoke:

my_string_map<int>::type my_str_int_map;

이것은 STL ( allocator::rebind<U>)과 Boost를 포함한 많은 라이브러리 에서도 사용됩니다 . 우리는 생물 정보학 도서관 에서 광범위하게 사용합니다 .

부풀어 있지만 99 %의 시간 동안 최고의 대안입니다. 여기에서 매크로를 사용하는 것은 많은 단점이 없습니다.

(편집 : Daniel이 그의 의견에서 지적한대로 Boost / STL 규칙을 반영하도록 코드를 수정했습니다.)


template <typename T>
struct my_string_map : public std::map<std::string,T> 
{
};

가상 소멸자가없는 클래스에서 상속하면 안됩니다. 파생 클래스의 소멸자가 호출되어야 할 때 호출되지 않는 것과 관련이 있으며 할당되지 않은 메모리로 끝날 수 있습니다.

파생 된 유형에 더 이상 데이터를 추가하지 않기 때문에 위의 인스턴스에서 ***** 아마도 ***** 벗어날 수 있다고 말합니다. 이것은 보증이 아닙니다. 나는 여전히 당신 이 그것을 하지 말라고 충고 합니다. 당신 이 그것을 있다는 사실이 당신 해야 한다는 것을 의미하지는 않습니다 .

편집 : 예, 이것은 ShaChris23의 게시물에 대한 답변입니다. 아래가 아닌 메시지 위에 표시 되었기 때문에 놓친 것 같습니다.


때로는 필요한 모든 유형에 대해 템플릿 화되지 않은 typedef를 명시 적으로 작성할 수 있습니다. 기본 클래스가 typedef되기를 원하는 유형이 하나 뿐인 여러 템플릿 인수에 템플릿 화 된 경우 상속 된 클래스 이름에 효과적으로 포함 된 typedef를 사용하여 특수 클래스를 상속 할 수 있습니다. 이 접근 방식은 메타 함수 접근 방식보다 덜 난해합니다.

참고 URL : https://stackoverflow.com/questions/26151/template-typedefs-whats-your-work-around

반응형