소개
객체 지향 프로그래밍에서는 인스턴스화하는 것이 일반적인 관행입니다. 특정 클래스의 객체. 그러나 특정 시나리오에서는 문자열로 저장된 클래스 이름을 기반으로 개체를 동적으로 생성하는 것이 유리할 수 있습니다. 이는 향상된 유연성과 코드 유지 관리성을 제공할 수 있습니다. 이 기사에서는 C에서 이러한 동적 객체 생성을 달성할 수 있는 가능성을 살펴봅니다.
문자열-유형 변환을 사용한 동적 객체 인스턴스화
안타깝게도 C는 기본적으로 클래스 이름을 보유한 문자열을 실제 유형 정보로 변환하는 직접적인 메커니즘입니다. 이는 명시적인 코드 변경 없이는 정적으로 정의된 클래스를 동적으로 인스턴스화할 수 없음을 의미합니다.
대체 접근 방식
직접 문자열을 유형으로 변환할 수는 없지만 다음이 있습니다. 동적 객체 생성을 위한 대체 기술:
1. 매핑 구조 사용:
클래스 이름(문자열)과 해당 클래스의 인스턴스를 생성하는 함수 포인터 간의 매핑을 생성할 수 있습니다. 이는 함수 포인터를 찾아 호출하여 동적 객체 생성을 허용합니다.
templateBase* createInstance() { return new T; } std::map<:string base> map; map["DerivedA"] = &createInstance ; // ... and so on
2. 자동 클래스 등록:
이 방법에는 매크로나 템플릿을 사용하여 컴파일하는 동안 클래스를 등록하는 방법이 포함됩니다. 등록된 클래스는 전역 맵에 자동으로 추가되므로 해당 이름을 사용하여 등록된 클래스에서 객체를 생성할 수 있습니다.
#define REGISTER_DEC_TYPE(NAME) \ static DerivedRegisterreg #define REGISTER_DEF_TYPE(NAME) \ DerivedRegister NAME::reg(#NAME) class DerivedB { ...; REGISTER_DEF_TYPE(DerivedB); };
3. Boost 변형 사용:
관련되지 않은 유형의 객체를 생성해야 하는 시나리오의 경우 Boost 라이브러리는 변형
typedef boost::variantvariant_type; template variant_type createInstance() { return variant_type(T()); }
결론
C에는 문자열을 유형으로 직접 변환하는 기능이 없지만 이 문서에서 설명하는 대체 접근 방식은 문자열에서 개체를 동적으로 인스턴스화하는 방법을 제공합니다. 매핑 구조, 자동 클래스 등록 또는 Boost 변형 유형을 활용하여 개발자는 객체 지향 애플리케이션에서 더 큰 유연성과 코드 유지 관리성을 얻을 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3