التكرار على أعضاء الهيكل والفئة
في لغة C، من الممكن التكرار من خلال أعضاء البنية أو الفئة لاسترداد أسمائهم والقيم. فيما يلي بعض الطرق لتحقيق ذلك:
استخدام وحدات الماكرو
يمكن استخدام الماكرو القابل للانعكاس لتحديد الهياكل التي تسمح بالاستبطان. يعرّف الماكرو أعضاء البنية كقائمة مفصولة بفواصل لأزواج أسماء النوع. على سبيل المثال:
struct A
{
REFLECTABLE
(
(int) a,
(int) b,
(int) c
)
};
بمجرد تعريف البنية، يمكنك استخدام دالة الزائر للتكرار على أعضائها وطباعة أسمائهم وقيمهم:struct print_visitor
{
template
void operator()(FieldData f)
{
std::cout
void print_fields(T & x)
{
visit_each(x, print_visitor());
}
A x;
print_fields(x);
تكيف الهياكل كتسلسلات اندماجية
هناك طريقة أخرى تتمثل في تكييف البنية كتسلسل دمج باستخدام الماكرو BOOST_FUSION_ADAPT_STRUCT. يعرّف هذا الماكرو أعضاء البنية كسلسلة من العناصر ذات النوع والقيمة المقابلة. على سبيل المثال:
struct A
{
int a;
int b;
int c;
};
BOOST_FUSION_ADAPT_STRUCT
(
A,
(int, a)
(int, b)
(int, c)
)
بمجرد تعديل البنية، يمكنك استخدام حلقة نطاق للتكرار على الأعضاء وطباعة أسمائهم وقيمهم:struct print_visitor
{
template
void operator()(Index, C & c)
{
std::cout ::call()
(c)
void print_fields(C & c)
{
typedef boost::mpl::range_c::type::value> range;
boost::mpl::for_each(boost::bind(print_visitor(), boost::ref(c), _1));
}
يسمح لك كلا الأسلوبين بفحص البنيات والفئات، وتوفير الوصول إلى أعضائها وقيمهم في وقت التشغيل. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3