يخزن قيمة واحدة بالضبط بشكل آمن نوعياً من مجموعة أنواع محددة مع أمان استثنائي مشروط.
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: 223b5b60b80cالمصدرأسئلة مفتوحة (2)
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
يخزن قيمة واحدة بالضبط بشكل آمن نوعياً من مجموعة أنواع محددة مع أمان استثنائي مشروط.
تُستخدم فئة القالب ara::core::Variant كاتحاد آمن نوعياً لتخزين وإدارة قيمة واحدة بالضبط من مجموعة أنواع محددة مسبقاً [SWS_CORE_01649]. وهي تدعم آليات مرنة للبناء والتعيين والإحلال الموضعي (Emplace) وتسمح بتحديد البديل النشط عبر index()[SWS_CORE_01665]. وتتمثل أهم خاصية مميزة مقارنة بالمعيار في مواصفات noexcept المعدلة والمشروطة لجميع العمليات المُعدِّلة بالإضافة إلى الحماية ضد الحالة valueless_by_exception()[SWS_CORE_01666].
السياق
تمثل فئة القالب ara::core::Variant اتحاداً آمناً نوعياً لـ AUTOSAR Adaptive Platform، ويتم تضمينها عبر الترويسة ara/core/variant.h. وتُغلف إدارة قيمة واحدة بالضبط من قائمة أنواع محددة في وقت التجميع (template <typename... Types> class Variant). ويعتمد التعريف بشكل أساسي على سلوك std::variant من معيار C++ [variant]، ولكنه يُظهر اختلافات خاصة بـ AUTOSAR فيما يتعلق بمواصفات الاستثناء. ويشير وصف الفئة في مخزون البيانات الوصفية إلى [basic.string]؛ تفسير: يُرجّح أن هذا خطأ تحريري، نظراً لأن جميع المتطلبات تشير باستمرار إلى قسم المعيار [variant]. سؤال Q-809de1af74fcb689 (مفتوح)
دورة الحياة
يمر مثيل ara::core::Variant بمراحل دورة حياة حتمية بدءاً من التهيئة مروراً بتغييرات القيمة وحتى التدمير. ويتم الإنشاء إما عبر المنشئ الافتراضي الخالي من المعلمات [SWS_CORE_01649]، الذي يهيئ البديل الأول، أو عبر منشئات النسخ والنقل [SWS_CORE_01650]، [SWS_CORE_01651] أو عبر التمرير المباشر للقيمة [SWS_CORE_01652]. بالإضافة إلى ذلك، تتوفر تحميلات زائدة للبناء الموضعي باستخدام in_place_type_t[SWS_CORE_01653]، [SWS_CORE_01654] وكذلك in_place_index_t[SWS_CORE_01655]، [SWS_CORE_01656]، وأيضاً بالاقتران مع قوائم التهيئة.
في الحالة المنتظمة، يحمل الكائن دائماً بديلاً صالحاً، ويمكن تحديد دليله ذي الأساس الصفري باستخدام الطريقة index()[SWS_CORE_01665]. وإذا فشل تغيير القيمة أثناء الإنشاء أو التعيين بسبب إطلاق استثناء، ينتقل المثيل إلى الحالة valueless_by_exception()[SWS_CORE_01666]. ويظل الكائن في هذه الحالة حتى يتم شغل بديل صالح مرة أخرى من خلال إعادة تهيئة ناجحة. ويقوم المدمر بتدمير الكائن المحتفظ به حالياً بشكل صحيح، وقد أُعلن أنه آمن استثنائياً بشكل مشروط [SWS_CORE_01657].
يتضمن مسار الاستخدام النموذجي إنشاء المثيل، وتعيين المحتوى أو استبداله، والاستعلام عن الحالة وتبادل القيم:
التهيئة: إنشاء مثيل عبر أحد المنشئات، على سبيل المثال عبر تمرير القيمة مباشرةً [SWS_CORE_01652] أو بشكل صريح مرتبط بالنوع باستخدام in_place_type_t[SWS_CORE_01653].
فحص الحالة: الاستعلام عن دليل النوع النشط عبر index()[SWS_CORE_01665] بالإضافة إلى التأمين ضد الأخطاء السابقة عبر valueless_by_exception()[SWS_CORE_01666].
تبادل الكائنات: التبادل الفعال لمثيلي Variant عبر الدالة العضو swap()[SWS_CORE_01667].
نظراً لأن مجموعة سجلات المواصفات الحالية تشتمل حصرياً على دوال أعضاء، فإن عمليات القراءة المباشرة مثل الوصول إلى القيمة مفقودة؛ ويُفترض أن دوال الوصول والزيارة (على غرار std::get أو std::visit) يتم توفيرها كدوال مساعدة حرة في مساحة الأسماء ara::core. سؤال Q-75847ac18088da57 (مفتوح)
سيناريوهات الأخطاء
في صميم معالجة الأخطاء تكمن خاصية الأمان الاستثنائي المشروط (conditionally exception safe). وبينما تحدد المكتبة القياسية قواعد noexcept ثابتة لـ std::variant، فإن AUTOSAR تنحرف عمداً عن ذلك: فجميع المنشئات [SWS_CORE_01650]، [SWS_CORE_01653]، ومعاملات التعيين [SWS_CORE_01658]، وعمليات emplace[SWS_CORE_01661]، [SWS_CORE_01663]، ودالة التبادل swap()[SWS_CORE_01667] وكذلك المدمر [SWS_CORE_01657] هي noexcept مشروطة. ويعتمد ضمان استثنائها بشكل مباشر على خصائص noexcept لمنشئات الأنواع الأساسية.
إذا أدى بناء قيمة جديدة أثناء التعيين أو استدعاء emplace إلى إطلاق استثناء، فقد يقع المتغير في حالة وسيطة غير صالحة. وتتم الإشارة إلى ذلك عبر valueless_by_exception()[SWS_CORE_01666]. وفقط دالتا الاستعلام index()[SWS_CORE_01665] وvalueless_by_exception()[SWS_CORE_01666] توفران ضمان noexcept غير مقيد وتعتبران آمنتين استثنائياً بالكامل.
يستند هذا الدليل إلى مواصفات AUTOSAR لـ Adaptive Platform (الإصدار R25-11، الوحدة core) وقد تم إعداده بواسطة مساعد تنسيق ذكاء اصطناعي.
As per corresponding usage in [variant] except for the following deviations: 1. Function is conditionally noexcept
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: 0fe1e0b61069المصدرأسئلة مفتوحة (1)
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
تنشئ الدالة العضو emplace قيمة بديلة من النوع T مباشرة في مثيل موجود من ara::core::Variant[SWS_CORE_01661]. يتم توفير الدالة عبر ملف الرأس #include "ara/core/variant.h" ويتم تنفيذها بشكل متزامن [SWS_CORE_01661]. كمعاملات، تأخذ مراجع إعادة التوجيه args... التي يتم تمريرها إلى دالة بناء النوع الهدف T، وتُرجع مرجعًا إلى الكائن المنشأ حديثًا [SWS_CORE_01661].
فيما يتعلق بمعالجة الأخطاء، تم التصريح عن العملية بأنها آمنة مشروطة من الاستثناءات («conditionally exception safe») [SWS_CORE_01661]. تتبع السلوك القياسي لـ variant، لكنها تختلف من خلال تحديد noexcept مشروط: يُستبعد حدوث استثناء تمامًا إذا وفقط إذا تحقق std::is_nothrow_constructible<T, Args...>::value[SWS_CORE_01661]. لم يتم تعريف رموز خطأ AUTOSAR محددة أو رسائل إلى DET أو DEM لهذه الدالة الأساسية.
فيما يتعلق بالتزامن وسياق الاستدعاء، لا تذكر المواصفة أي ضمانات مختلفة. تفسير: من المحتمل ألا يكون وصول الكتابة المتزامن لمؤشرات ترابط متعددة إلى نفس مثيل Variant عبر emplace آمنًا بالنسبة لمؤشرات الترابط دون مزامنة خارجية، نظرًا لأن AUTOSAR تشير إلى الدلالات القياسية لـ variant. سؤال Q-4d9d118b9916a3dc (مفتوح)
As per corresponding usage in [variant] except for the following deviations: 1. Function is conditionally noexcept
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: a346c9068921المصدرأسئلة مفتوحة (2)
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
تُستخدم الدالة العضو emplace الخاصة بـ ara::core::Variant من ملف الترويسة ara/core/variant.h للإنشاء المتزامن لبديل من النوع T مباشرة في ذاكرة النسخة الحالية [SWS_CORE_01662]. يتم هنا تمرير std::initializer_list<U> بالإضافة إلى الوسائط المُعاد توجيهها Args&&... args إلى دالة بناء النوع. كقيمة إرجاع، تُرجع الدالة مرجع lvalue T& إلى الكائن الذي تم تهيئته حديثًا [SWS_CORE_01662].
فيما يتعلق بمعالجة الأخطاء ومعالجة الاستثناءات، تختلف الدالة عن التعريف القياسي في [variant]: تم تصنيفها على أنها آمنة من الاستثناءات مشروطًا (conditionally exception safe) وتحتوي على مواصفة noexcept مشروطة [SWS_CORE_01662]. يضمن الاستدعاء الخلو من الاستثناءات طالما يتم تقييم std::is_nothrow_constructible<T, std::initializer_list<U>&, Args&&...>::value إلى true[SWS_CORE_01662]. لا توجد رموز أخطاء AUTOSAR محددة أو قنوات إبلاغ إلى DET وDEM لهذا العنصر.
فيما يتعلق بالتزامن والشروط الحدية: بما أن emplace يُعدل حالة نسخة Variant، فمن المحتمل ألا يكون الاستدعاء المتزامن آمنًا لمؤشرات الترابط بدون مزامنة خارجية. تفسير: قبل بناء الكائن الجديد، يتم تدمير القيمة المتضمنة مسبقًا، كما يتوافق مع السلوك العام لـ [variant]. سؤال Q-548c84cc1d327030 (مفتوح)
في إطار التفاعل مع الواجهات ذات الصلة، تمثل الدالة النظير المستند إلى النوع للتحميل الزائد بدون قائمة تهيئة [SWS_CORE_01661] بالإضافة إلى البدائل المستندة إلى الفهرس [SWS_CORE_01663] و[SWS_CORE_01664]. توجد مفاهيم واجهة مماثلة لدى ara::core::Optional[SWS_CORE_01120] وكذلك لدى الحاويات مثل ara::core::Vector[SWS_CORE_01366] أو ara::core::Map[SWS_CORE_01458]، مع ملاحظة أن عمليات إدراج الحاوية في الموضع، على النقيض من ذلك، ليست آمنة من الاستثناءات.
تم إنشاء ملاحظة الاستخدام هذه تلقائيًا بناءً على بيانات مواصفات AUTOSAR R25-11.
template <std::size_t I, typename... Args> variant_alternative_t< I, Variant< Types... > > & emplace (Args &&... args) noexcept({<cond-noexcept-11>});
As per corresponding usage in [variant] except for the following deviations: 1. Function is conditionally noexcept
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: f8cbed1f17b1المصدرأسئلة مفتوحة (1)
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
الاستخدام
تُستخدم الدالة العضو emplace من الفئة ara::core::Variant ([SWS_CORE_01663]) من ملف الترويسة ara/core/variant.h للبناء المباشر للبديل المحدد بواسطة فهرس القالب I في الذاكرة الحالية للكائن. يتم تمرير الوسائط Args&&... args كمعلمات. يتم الاستدعاء بشكل متزامن ويُرجع مرجعًا إلى القيمة المُنشأة حديثًا من النوع variant_alternative_t<I, Variant<Types...>> ([SWS_CORE_01663]). يتبع السلوك التعريف الوارد في [variant] ([SWS_CORE_01663]).
معالجة الأخطاء والأمان من الاستثناءات
تحدد المواصفة كاختلاف عن معيار C++ بند noexcept({<cond-noexcept-11>}) مشروطًا بالإضافة إلى الخاصية conditionally exception safe ([SWS_CORE_01663]). يُفترض أن إطلاق الاستثناءات يعتمد على ما إذا كانت دالة بناء البديل الهدف آمنة من الاستثناءات بالنسبة للأنواع المُمررة Args.... سؤال Q-189fe417e9ef4980 (مفتوح) لم يتم تحديد رموز أخطاء معينة، أو قيم إرجاع في حالة الخطأ، أو إشعارات إلى DET أو DEM لهذه الدالة.
التفاعل والبدائل
ضمن الوحدة core والنوع ara::core::Variant، تم تضمين الدالة في نظام من التحميلات الزائدة الإضافية:
تهيئة مستندة إلى الفهرس باستخدام std::initializer_list ضمن [SWS_CORE_01664].
template <std::size_t I, typename U, typename... Args> variant_alternative_t< I, Variant< Types... > > & emplace (std::initializer_list< U > il, Args &&... args) noexcept( {<cond-noexcept-12>});
As per corresponding usage in [variant] except for the following deviations: 1. Function is conditionally noexcept
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: a600ca3cb60dالمصدرأسئلة مفتوحة (1)
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
تبني الدالة العضو emplace من ara/core/variant.h بشكل متزامن قيمة بديلة جديدة مباشرة في موضعها داخل نسخة موجودة من ara::core::Variant[SWS_CORE_01664]. يتم تحديد النوع المطلوب استهدافه بشكل ثابت عبر فهرس القالب I. يقبل الاستدعاء قائمة مُهيئات il من النوع std::initializer_list<U> بالإضافة إلى وسائط اختيارية args، ويُرجع مرجعًا إلى القيمة المُنشأة حديثًا من النوع variant_alternative_t<I, Variant<Types...>>&[SWS_CORE_01664].
بالنسبة لمعالجة الأخطاء، تم تصنيف العملية على أنها آمنة من الاستثناءات مشروطًا (conditionally exception safe) ومزودة بـ noexcept مشروط [SWS_CORE_01664]. من المفترض أن يعتمد تقييم الشرط {<cond-noexcept-12>} على ما إذا كانت دالة بناء النوع الهدف لا تطلق استثناءات مع il وargs. سؤال Q-87f90253fc61c883 (مفتوح) لم يتم تحديد رموز أخطاء محددة أو رسائل إلى DET أو DEM في المواصفة؛ ويتبع السلوك عند حدوث استثناءات السلوك القياسي لـ [variant][SWS_CORE_01664]، باستثناء التصريح noexcept.
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: fb0fc41b4094المصدرأسئلة مفتوحة (1)
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
تخدم الدالة العضو index للفئة ara::core::Variant للاستعلام المتزامن عن الفهرس المستند إلى الصفر للنوع المحتفظ به حاليًا وفقًا للمواصفة [SWS_CORE_01665]. وهي تتصرف على نحو مماثل للاستخدام المقابل في نوع C++ القياسي std::variant («As per corresponding usage in [variant]»)، ولا تأخذ أي معلمات وترجع الفهرس الحالي كـ std::size_t. وهي مصرح عنها في الترويسة ara/core/variant.h ومؤهلة كـ constexpr وكذلك noexcept.
فيما يتعلق بمعالجة الأخطاء وأمان الاستثناءات، حُددت الطريقة بأنها exception safe[SWS_CORE_01665]. وبما أنها مُعلنة كـ noexcept، فإنها لا تطلق أي استثناءات بنفسها ولا تثير حالات خطأ. يمكن للمتصلين تقييم الفهرس المُرجع للتأكد من النوع النشط في ara::core::Variant قبل الوصول إلى القيم البديلة.
تلعب index دورًا محوريًا بالتضافر مع دوال الوصول محددة النوع ara::core::get: تتحقق التحميلات الزائدة لـ get لكل من lvalues وrvalues صراحةً من الشرط variant.index() != I وفقًا لـ [SWS_CORE_01613] و[SWS_CORE_01614] و[SWS_CORE_01615] و[SWS_CORE_01616]. وإذا لم يتطابق الفهرس مع فهرس الموضع المطلوب I، فسيتم إطلاق الانتهاك IsoStdBadVariantAccessViolation بخلاف ما هو عليه في std::bad_variant_access. وتمنع المقارنة المسبقة بواسطة index() هذا الوصول الخاطئ أثناء وقت التشغيل.
فيما يخص التزامن، تُعد الطريقة كعملية const آمنة لعمليات القراءة المتزامنة على نفس الـ Variant طالما لا توجد تعديلات متزامنة؛ ومن المرجح عدم وجود مزامنة داخلية ضد عمليات الكتابة المتوازية. سؤال Q-12e0dad0a6b8c5d0 (مفتوح)
تم توليد هذا النص بواسطة ذكاء اصطناعي استنادًا إلى مواصفة AUTOSAR R25-11.
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: 015c4319d2b5المصدرأسئلة مفتوحة (2)
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
الاستخدام
يتم توفير الدالة العضو valueless_by_exception للفئة ara::core::Variant في الوحدة core عبر ملف الترويسة #include "ara/core/variant.h" ([SWS_CORE_01666]). ووفقًا لتوقيعها constexpr bool valueless_by_exception () const noexcept;، فهي لا تتطلب معلمات استدعاء وترجع بشكل متزامن قيمة منطقية ([SWS_CORE_01666]). وتتبع الأهمية الوظيفية الدلالات المعتادة لـ [variant] («As per corresponding usage in [variant]») ([SWS_CORE_01666]). تفسير: يُرجح أن تشير الحالة المعادة true لجهة الاستدعاء إلى أن تعيين قيمة سابق أو تغيير نوع قد تم إلغاؤه بسبب حدوث استثناء، وبالتالي فإن كائن Variant لا يمثل حالة صالحة مؤقتًا. سؤال Q-af7c00c7eb4ef5a1 (مفتوح)
معالجة الأخطاء والأمان من الاستثناءات
فيما يتعلق بسلوك الخطأ، أُعلن عن الطريقة كـ noexcept وصُنفت رسميًا كـ exception safe ([SWS_CORE_01666]). ولا توجد حالة خطأ خاصة بها عند الاستعلام؛ كما أن الدالة لا تطلق استثناءات C++ ([SWS_CORE_01666]). لم يتم تعريف رموز خطأ محددة أو أوصاف ملاحظات أو رسائل إلى جهات مراقبة التشخيص والأخطاء مثل DET أو DEM لهذا العنصر ([SWS_CORE_01666]).
التزامن والقيود
نظرًا لأن valueless_by_exception محددة كطريقة const وconstexpr، فلا يتم إجراء أي وصول مُعدِّل للحالة الداخلية للكائن أثناء التنفيذ ([SWS_CORE_01666]). تفسير: من المرجح أن تكون استعلامات القراءة المتزامنة لنفس المثيل من خيوط متعددة قابلة للتنفيذ بأمان دون مزامنة منفصلة، طالما تم استبعاد عمليات الكتابة المتزامنة. سؤال Q-5c28f8cef1c1f097 (مفتوح)
تم إنشاء ملاحظة الاستخدام هذه آليًا استنادًا إلى AUTOSAR R25-11.
gemini-3.8-flash-low· 2026-10-13 · الأصل الألماني