قواعد بناء الجملة للرمز المميز "..." في القوالب المتغيرة
في لغة C، تتيح القوالب المتغيرة إنشاء قوالب تقبل عدد متغير من الحجج. يلعب الرمز المميز "..." دورًا حاسمًا في هذا السياق، حيث يعمل إما كحزمة وسيطات أو أداة فك ضغط المعلمات.
قواعد بناء الجملة لموضع القطع
يحدد موضع الرمز "..." وظيفته:
مثال: قالب متغير يحتوي على "..."
فكر في المتغير التالي القالب:
template
unique_ptr make_unique( Args&&... args )
{
return unique_ptr(new T(std::forward(args)...));
}
في هذا المثال، يعمل "..." كحزمة وسيطات، بينما يقوم "..." في تنفيذ الوظيفة بفك ضغط الوسائط في متغير الوسائط.
سبب اختلاف موضع علامات الحذف
يرجع الاختلاف في موضع علامات الحذف بين قائمة وسيطات القالب وقائمة المعلمات إلى التمييز بين تعبئة الوسائط وتفريغ المعلمات. في قائمة وسيطات القالب، يشير "..." إلى أنه يجب تجميع المعلمات في حزمة معلمات واحدة، بينما في قائمة المعلمات، يشير "..." إلى أنه يجب تفكيك الوسائط في معلمات فردية.
أنماط التفريغ
عندما تظهر "..." على الجانب الأيمن من التعبير كأداة فك الحزم، فإنها تتبع نمطًا محددًا:
الاستخدام المتقدم: تهيئة المصفوفات
يمكن أيضًا استخدام القطع الناقص لتهيئة المصفوفات:
struct data_info
{
boost::any data;
std::size_t type_size;
};
std::vector v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}
يؤدي هذا إلى تهيئة المتجه v بقيم حيث يكون كل عنصر عبارة عن بنية تحتوي على وسيطات وزوج sizeof(T).
في الختام ، يعمل الرمز المميز "..." في سياق القوالب المتغيرة كحزمة وسائط وأداة فك حزم المعلمات، باتباع قواعد بناء الجملة المحددة لأنماط التنسيب والتفريغ. يسمح استخدامه المرن بإنشاء قوالب قوية وتخصيصها.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3