استفاده کردن از مفهوم SFINAE (Substitution Failure Is Not An Error) در C++ برای انتخاب توابع مناسب بر اساس خصوصیت های قالب
توضیحات:
مفهوم SFINAE (Substitution Failure Is Not An Error) در C++ به برنامه نویس این امکان را میدهد که با استفاده از اصول انتخاب توابع مناسب (SFINAE)، توابع مناسب بر اساس خصوصیتهای قالب (template) انتخاب شوند. وقتی یک تابع یا کلاس قالب با پارامترهای خاص فراخوانی میشود، کامپایلر سعی میکند پارامترهای قالب را با مقادیر ورودی مطابقت دهد. اگر این مطابقت انجام نشود، ممکن است خطایی رخ دهد. اما در SFINAE، اگر مطابقت انجام نشود، کامپایلر به جای ایجاد خطا، ادامه میدهد و توابع دیگری را بررسی میکند.
برای استفاده از مفهوم SFINAE برای انتخاب توابع مناسب بر اساس خصوصیتهای قالب، میتوانید از توابع مناسب برای شرایط خاص استفاده کنید و از اصول SFINAE برای انتخاب آنها استفاده کنید. به طور معمول، از توابع SFINAE برای انتخاب توابع با استفاده از تمپلیتهای متنوع، از اپراتورهای عملگری، یا از ویژگیهای خصوصیتهای قالب استفاده میشود.
به عنوان مثال، فرض کنید که میخواهید یک تابع بنویسید که با استفاده از SFINAE، تعداد زوج یا فرد بودن یک عدد را بررسی کند. میتوانید از تمپلیتها و اصول SFINAE برای انتخاب تابع مناسب بر اساس خصوصیتهای قالب استفاده کنید:
#include <iostream>
// تعریف یک تمپلیت برای بررسی زوج یا فرد بودن یک عدد
template <int N, typename = void>
struct is_even {
static const bool value = false;
};
template <int N>
struct is_even<N, typename std::enable_if<N % 2 == 0>::type> {
static const bool value = true;
};
int main() {
// استفاده از تمپلیت برای بررسی زوج یا فرد بودن یک عدد
std::cout << "Is 5 even? " << is_even<5>::value << std::endl; // 0 (false)
std::cout << "Is 6 even? " << is_even<6>::value << std::endl; // 1 (true)
return 0;
}
در این مثال، از تمپلیت is_even
برای بررسی زوج یا فرد بودن یک عدد استفاده شده است. اگر عدد ورودی به تمپلیت زوج باشد، تابع is_even
با مقدار true
برگردانده میشود، در غیر این صورت با مقدار false
برگردانده میشود. اصول SFINAE در اینجا برای انتخاب تابع مناسب بر اساس خصوصیتهای قالب استفاده شده است.
موفق باشید
A.J
پست های مرتبط:
فروشگاه سورسا:
سورسا ، یک خانواده!
شما میتوانید از سورس های آماده به راحتی و با کپی پیست در پروژه خود استفاده بفرمایید
بله! سورسا به عنوان اولین و برترین مرجع سورس کد های آماده، تمامی سورس کد ها در زبان های مختلف را به صورت رایگان در اختیار شما قرار میدهد.
اگر سورس مد نظر شما تفاوتی با سورس فعلی دارد یا اینکه درخواست سورس دیگری را دارید میتوانید با کارشناسان سورسا در ارتباط باشید.
سورسا به عنوان مرجع سورس در تلاش است سورس کد ها و آموزش های تمامی زبان های برنامه نویسی مانند GO C++ Python C PHP SQL JS و… را تحت پوشش قرار داد