유형 검사를 통한 강력한 유형의 식별자 구현
C 17에서는 의도한 클래스에서 상속하는 사용자 정의 클래스를 사용하여 강력한 유형의 식별자를 구현할 수 있습니다. 기본 유형. 이렇게 하면 컴파일 중에 유형 검사가 가능해 호환되지 않는 값의 할당을 방지할 수 있습니다.
다음 코드를 고려하세요.
#include <iostream> #include <string> #include <map> struct portal_tag {}; struct cake_tag {}; template<class Tag> struct string_id : public std::string { string_id(std::string s) : _value(std::move(s)) {} const std::string& value() const { return _value; } private: std::string _value; }; // Type aliases for convenience using PortalId = string_id<portal_tag>; using CakeId = string_id<cake_tag>; int main() { PortalId portal_id("2"); CakeId cake_id("is a lie"); std::map<CakeId, PortalId> p_to_cake; // OK p_to_cake[cake_id] = portal_id; // OK // p_to_cake[portal_id] = cake_id; // Compile error // portal_id = cake_id; // Compile error // portal_id = "1.0"; // Compile error portal_id = PortalId("42"); // OK // ... Additional operations... }
이 코드에서 string_id는 std:에서 상속하는 템플릿 클래스입니다. 끈. 기본 문자열 값에 액세스하기 위한 value() 메서드를 제공합니다. 고유한 식별자(예: Portal_tag 및 cake_tag)를 생성하기 위해 다양한 유형이 태그로 사용됩니다.
이 접근 방식을 사용하면 컴파일러에서 다양한 유형의 식별자 간의 할당을 방지할 수 있습니다. 또한 비교 및 해싱과 같은 표준 작업을 지원하므로 지도와 같은 컨테이너와의 원활한 통합이 가능합니다.
위 내용은 C 17에서 유형 검사를 사용하여 강력한 유형의 식별자를 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!