>  기사  >  백엔드 개발  >  C 17에서 유형 검사를 사용하여 강력한 유형의 식별자를 어떻게 구현할 수 있습니까?

C 17에서 유형 검사를 사용하여 강력한 유형의 식별자를 어떻게 구현할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-16 08:23:02956검색

How Can I Implement Strongly Typed Identifiers with Type Checking in C  17?

유형 검사를 통한 강력한 유형의 식별자 구현

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.