الگوهای واریادی در استاندارد C ++ 11 و توسعه کد عمومی به طور قابل توجهی ساده شده است. آنها به شما امکان می دهند توابع و کلاسهایی ایجاد کنید که تعداد متغیر آرگومان های الگو و پارامترهای عملکرد را در نظر بگیرید. این امر به ویژه هنگام نوشتن برنامه های جهانی ، چارچوب ها و کتابخانه هایی که نیاز به کار با تعداد دلخواه انواع و پارامترها دارند ، مفید است.
چرا به الگوهای متغیر مورد نیاز است؟
قبل از C ++ 11 ، اگر نیاز به تعداد دلخواه آرگومان ها را با استفاده از قالب ها به یک عملکرد یا کلاس منتقل کنید ، مجبور بودید از اضافه بار و ترفندها با ماکرو استفاده کنید. تمام این رویکردها اغلب کد حجیم و پیچیده بودند.
الگوهای متغیر با اجازه استفاده از نحو مانند موارد زیر ، این مشکل را حل می کنند:
template
void foo(Args... args) {
// Implementation
}
typename... Args
مشخص می کند که این الگو تعداد خودسرانه ای از انواع را به عنوان پارامترها می گیرد. به همین ترتیب ، در عملکرد foo(Arg... args)
استفاده از تعداد متغیر آرگومان از هر نوع امکان پذیر است.
چگونه کار می کند؟
ایده این است که کامپایلر با استفاده از مکانیسم های آشکار شدن یا “باز کردن پارامترهای” ، باعث ایجاد غلبه های مربوطه می شود. در ساده ترین حالت ، می توانیم تابعی را بنویسیم که تمام آرگومان های تصویب شده را چاپ می کند.
#include
// Universal template for base of recursion
template
void print(T value)...