선적 서류 비치
Reff-CPP는 C ++에 컴파일 타임 반사 및 내성 기능을 제공하는 헤더 전용 라이브러리입니다. 유형 시스템에서 유형 메타 데이터를 인코딩하면 Reffpp를 사용하면 ConstexPR 및 Template Metaprogramming을 통해 유형 및 해당 필드 및 기능을 처리 할 수 있습니다.
프로젝트에서 Reflec-CPP를 사용하십니까? 듣고 싶습니다. 이메일로 저에게 연락하십시오 (내 프로필 참조), 문제를 열거 나 #refl-cpp 태그를 주제에 추가하십시오!
질문이 있습니까? Gitter 채널에서 물어보십시오.
RECREC-CPP를 지원하고 싶습니까? 기부를 고려하십시오.
RECOND-CPP는 비교적 작은 API 표면을 유지하면서 귀하의 요구에 맞게 유연한 일반적인 반사 시스템을 제공하는 것을 목표로합니다.
Refl-CPP가 Box를 지원합니다.
std::tuple s 유형 및 멤버 디스크립터와 관련된 tuple sT 와 동일한 멤버가있는 일반 proxy<T> 유형 빌드간단한 직렬화 시스템 구현 -Example -Serialization.CPP- 컴파일러 탐색기에서의보기 효율적인 일반 직렬화 절차를 처음부터 구현합니다.
간단한 SQL 데이터베이스 추상화 - 예제 DAO.CPP- 컴파일러 탐색기의보기 사용자 정의 속성을 사용하여 모델 클래스에서 컴파일 타임에서 SQL 문을 생성 할 수있는 기본 ORM 시스템을 구현합니다.
bases<> - example -inheritance.cpp와 함께 기본 클래스 반복 - 컴파일러에서보기 내장 bases<> 속성을 사용하여 유형의 기본 클래스를 반복합니다.
런타임에 대한 액세스 반사 정보 -example-custom-rtti.cpp- 컴파일러 탐색기에서보기는 사용자 정의 메타 데이터 객체를 통해 런타임에서 반사 메타 데이터에 대한 액세스를 제공하는 RECRENT-CPP에 대한 기본 런타임 추상화를 구현합니다.
강력한 유형의 특성이있는 XML 기반 GUI -example-binding.cpp- 컴파일러 탐색기에서보기는 Reflec-CPP 상단에 사용자 정의 런타임 리플렉션 레이어를 구축하여 Reflec-CPP를 사용하여 XML 리소스를 읽는 시스템을 구현합니다.
제네릭 빌더 클래스 공장 - 예제 - 빌더를 구현합니다 . CPP- 컴파일러 탐색기에서보기 일반 builder<T> 클래스를 정의하여 모든 유형 T 의 빌더 패턴을 구현합니다.
액세서 방법으로 필드를 변환 - example -proxy.cpp- 컴파일러에서보기 프록시 기능을 사용하여 일반 유형 value_proxy<T> T .
구조물을 배열의 구조로 봅니다 -example-struct-of-arrays.cpp- 컴파일러에서보기 프록시 기능을 사용하여 프록시 기능을 사용하여 일반적인 유형의 T 의 멤버를 std::vector 에 저장하는 일반적인 유형의 struct_of_arrays<T> 생성 T operator[](int) , 개별 오브젝트를 구성하여 개별 오브젝트를 구성하는 경우,
std::optional 멤버 - exampartials.cpp의 구조물 생성 - 컴파일러에서보기 프록시 기능을 사용하여 proxy feature를 사용하여 std::optional 에서 T 의 모든 멤버를 랩핑하는 일반 유형 partial<T> 만듭니다.
나는 고등학교에서 마지막 해에 Reflec-CPP를 개발하기 시작했습니다. 나는 시험을 위해 공부해야했지만, 원래 정적 반사 (2017) 제안을 읽었으며, 곧 오지 않았다는 것을 깨달은 후에는 가능한 많은 기능을 컴파일 타임 라이브러리에 넣어야한다고 결정했습니다.
도서관은 초창기부터 성장하고 많이 바뀌었지만 몇 년이 지난 후에도 ConstexPR 및 템플릿 메타 프로 그램을 지원하는 또 다른 반사 라이브러리를 보지 못했습니다. 다른 라이브러리를 사용하면 런타임에 메타 데이터 구조를 걸고 기능 포인터를 호출하고 타입 발전을 사용해야합니다. Reflec-CPP를 사용하면 for_each 루프를 통해 컴파일 타임에서 유형 메타 데이터를 처리하면 모든 유형이 있으며 컴파일러는 종종 모든 것을 인화하고 손으로 작성했을 것과 동일한 코드를 생성 할 수 있습니다.
Refl-CPP의 모든 유틸리티 기능은 ConstexPR입니다 ( refl::runtime 의 제외). 컴파일러는 일반적으로 모든 루프 및 기타 구조물 ( -O2 사용할 때)을 인화하고 손으로 작성된 것처럼 빠르게 실행되는 코드를 생성합니다.
일부 특수 컴파일 타임 최적화 덕분에 유형 자체가 반사에 사용되지 않을 때 유형 메타 데이터는 일반적으로 인스턴스화되지 않습니다 (코드 성은 발생하지 않음). 0.12.2의 경우 속성 #60을 사용할 때 컴파일 시간이 크게 감소했습니다.
즉,주의 한 말 : 나는 250 명의 반사 멤버 마크 후에 편집 시간이 빠르게 증가하기 시작한다는 것을 관찰했다. 코드베이스에 많은 거대한 클래스 (+250 함수)가 포함되어 있고 모두 refl-cpp 에 반사 해야하는 경우 사용하기 전에 거래 차단기 일 수 있습니다.
refl-cpp를 단일 헤더 라이브러리로 사용하려면 포함 디렉토리에 include/refl.hpp 시키십시오.
CMAKE 부근 (3.14+ 필수 @FrienthlyAnon)으로 Reflec-CPP를 소비 할 수도 있습니다.
vcpkg install refl-cpp (감사합니다 @vennor)conan install refl-cpp 온라인 문서는 독소로 구축되었습니다. doxygen Doxyfile docs/ 로 실행하여 업데이트하십시오.
-Drefl-cpp_DEVELOPER_MODE=ON 으로 cmake를 실행하고 refl-cpp-tests 대상을 만듭니다.
플래그 -Drefl-cpp_DEVELOPER_MODE=ON 로 cmake를 실행하십시오. 보다 편리한 개발자 경험을 위해 사용자 정의 사전 설정을 설정할 수도 있습니다 ( #44 의이 의견 참조).