الوثائق
RESP-CPP هي مكتبة رأس فقط توفر انعكاس وقت الترجمة وقدرات التأمل إلى C ++. عن طريق ترميز البيانات الوصفية نوع في نظام النوع ، يتيح لك RESP-CPP معالجة أنواعها وحقولها ووظائفها عبر constexpr و metaprogramming.
باستخدام RESP-CPP في مشروعك؟ أريد أن أسمع عن ذلك: اتصل بي عبر البريد الإلكتروني (انظر ملف التعريف الخاص بي) ، افتح مشكلة أو أضف علامة #RESP-CPP إلى موضوعاتك!
لديك سؤال؟ حاول أن تسأل في قناة Gitter.
تريد دعم Refled-CPP؟ النظر في تقديم التبرع.
تهدف REFP-CPP إلى توفير نظام انعكاس عام مرن بما يكفي لتناسب احتياجاتك مع الحفاظ على سطح API صغير نسبيًا.
بعض الأشياء اللطيفة تدعم Refled-CPP خارج الصندوق:
std::tuple s المرتبطة بالأنواع والواصفات الأعضاءproxy<T> مع نفس الأعضاء مثل T التي يمكن استخدامها للالتفاف أو تمديد الوظائفتنفيذ نظام تسلسل بسيط - مثال على ذلك
تجريد قاعدة بيانات SQL البسيط - مثال dao.cpp - عرض في برنامج التحويل البرمجي ينفذ نظام ORM أساسي يمكنه إنشاء عبارات SQL في وقت الترجمة من فئات النماذج باستخدام خصائص مخصصة
فئات قاعدة التكرار مع bases<> bases<> مثال على ذلك
معلومات انعكاس الوصول في وقت التشغيل -مثال- custom-rtti.cpp-عرض في برنامج التحويل البرمجي يبرز تجريدًا أساسيًا للوقت على RESP-CPP والذي يوفر الوصول إلى بيانات التعريف في وقت التشغيل عبر كائنات بيانات التعريف المخصصة
واجهة المستخدم الرسومية المستندة إلى XML مع خصائص من النوع القوي- example binding.
قم بتنفيذ مصنع فئة منشئ عام - على T المثال builders builder<T>
تحويل الحقول إلى أساليب الوصول - مثال proxy.cpp - العرض في برنامج التحويل البرمجي يستخدم ميزة الوكيل لإنشاء نوع عام value_proxy<T> الذي يعرض جميع حقول T من خلال طرق Accessors
عرض مجموعة std::vector الهياكل كهيكل من المصفوفات struct_of_arrays<T> T على الهيكل T operator[](int)
إنشاء بنية من الأعضاء std::optional - مثال partials.cpp - عرض في برنامج التحويل البرمجي يستخدم ميزة الوكيل لإنشاء نوع عام partial<T> يلف جميع أعضاء T في std::optional
بدأت في تطوير RESE-CPP خلال سنتي الأخيرة في المدرسة الثانوية. كان من المفترض أن أدرس للامتحانات ، لكنني قرأت للتو اقتراح الانعكاس الثابت الأصلي (2017) ، وبعد أن أدركت أنه لم يأت في أي وقت قريب ، قررت أنه كان عليّ أن أحاول أن أحاول الكثير من هذه الميزات في مكتبة وقت التجميع.
نمت المكتبة وتغيرت كثيرًا منذ الأيام الأولى ، لكن حتى بعد عدة سنوات ، ما زلت لم أر مكتبة انعكاس أخرى تدعم constexpr و metaprogramming. مع المكتبات الأخرى ، غالبًا ما يتعين عليك السير في بنية بيانات التعريف في وقت التشغيل ، واستدعاء مؤشرات الوظائف ، واستخدام الإراسور النوع. مع RESP-CPP ، تقوم بمعالجة البيانات الأولية في وقت الترجمة ، عبر حلقات for_each ، جميع الأنواع الموجودة ، ويمكن للمترجم في كثير من الأحيان أن يضع كل شيء وإنشاء نفس الرمز الذي كنت قد تم كتابته يدويًا.
جميع وظائف الأداة المساعدة في RESP-CPP هي constexpr (باستثناء تلك الموجودة في refl::runtime ). ستقوم المجمعون عمومًا بتضمين جميع الحلقات والبنيات الأخرى (عند استخدام -O2 ) وإنشاء رمز يتم تشغيله بنفس السرعة كما لو كان مكتوبًا يدويًا.
بفضل بعض التحسينات الخاصة بوقت التجميع ، لا يتم إنشاء بيانات التعريف من النوع بشكل عام (لا يلزم حدوث أي رمز) عند عدم استخدام الأنواع نفسها في التفكير. مع 0.12.2 ، كان هناك أيضًا بعض التخفيضات الرئيسية في وقت التجميع عند استخدام الخصائص رقم 60.
ومع ذلك ، كلمة تحذير: لقد لاحظت أنه بعد حوالي 250 من الأعضاء المنعكسين ، تبدأ أوقات التجميع في النمو بسرعة. إذا كانت قاعدة بيانات الكود الخاصة بك تحتوي على الكثير من الفصول الضخمة (+250 وظائف) ، وتحتاج إلى انعكاسها جميعًا مع refl-cpp ، فقد يكون هذا بمثابة معيار صفقات قبل الاستخدام.
لاستخدام RESP-CPP كمكتبة رأس واحدة ، قم include/refl.hpp إلى دليل تضمينك.
يمكنك أيضًا استهلاك RESP-CPP باعتباره cmake reparecy (3.14+ مطلوب ، شكرًا لـ intervileslyanon).
vcpkg install refl-cpp (شكرًا لـ VENNOR)conan install refl-cpp تم تصميم الوثائق عبر الإنترنت باستخدام Doxygen. قم بتشغيل doxygen Doxyfile في docs/ لتحديثه.
قم بتشغيل cmake باستخدام -Drefl-cpp_DEVELOPER_MODE=ON وجعل هدف refl-cpp-tests .
قم بتشغيل cmake مع -Drefl-cpp_DEVELOPER_MODE=ON العلامة. قد ترغب أيضًا في إعداد إعداد مسبق مخصص لتجربة مطور أكثر ملاءمة (انظر هذا التعليق على #44).