استفاده کردن از مفهوم CRTP (Curiously Recurring Template Pattern) در C++ برای ارث بری از کلاس های قالب
توضیحات:
الگوی CRTP یک الگوی طراحی در C++ است که اجازه میدهد کلاسی از یک کلاس قالب دیگر ارث بری کند و از قالب خود برای ارث بری استفاده کند. این الگو به برنامه نویس امکان میدهد که ویژگیها و روشهای کلاس پایه را به کلاس مشتق شده ارث برده و از آنها استفاده کند.
برای استفاده از CRTP، ابتدا باید یک کلاس قالب تعریف کنید که به عنوان کلاس پایه برای کلاسهای مشتق شده عمل میکند. سپس کلاس مشتق شده باید خود را به عنوان قالب به کلاس پایه ارسال کند.
در زیر یک مثال ساده از استفاده از CRTP در C++ آورده شده است:
#include <iostream>
template <typename Derived>
class Base {
public:
void print() {
static_cast<Derived*>(this)->printDerived();
}
};
class Derived : public Base<Derived> {
public:
void printDerived() {
std::cout << "I am a derived class" << std::endl;
}
};
int main() {
Derived d;
d.print();
return 0;
}
در این مثال، کلاس Base
یک کلاس قالب است که یک تابع print
دارد که از کلاس مشتق شده برای چاپ پیام استفاده میکند. کلاس Derived
از کلاس Base
ارث بری کرده و تابع printDerived
را پیاده سازی کرده است.
در تابع print
کلاس Base
، از static_cast
برای تبدیل this
به نوع مشتق شده استفاده شده است و سپس تابع printDerived
از کلاس مشتق شده فراخوانی میشود.
در تابع main
، یک شی از کلاس Derived
ایجاد شده و تابع print
بر روی آن فراخوانی میشود که منجر به چاپ پیام “I am a derived class” میشود.
استفاده از CRTP در C++ به برنامه نویس این امکان را میدهد که کدهای تکراری را کاهش داده و کد را بهبود بخشید. این الگو به برنامه نویس امکان ارث بری از کلاسهای قالب و استفاده از ویژگیها و روشهای آنها را میدهد.
موفق باشید
A.J
پست های مرتبط:
فروشگاه سورسا:
سورسا ، یک خانواده!
شما میتوانید از سورس های آماده به راحتی و با کپی پیست در پروژه خود استفاده بفرمایید
بله! سورسا به عنوان اولین و برترین مرجع سورس کد های آماده، تمامی سورس کد ها در زبان های مختلف را به صورت رایگان در اختیار شما قرار میدهد.
اگر سورس مد نظر شما تفاوتی با سورس فعلی دارد یا اینکه درخواست سورس دیگری را دارید میتوانید با کارشناسان سورسا در ارتباط باشید.
سورسا به عنوان مرجع سورس در تلاش است سورس کد ها و آموزش های تمامی زبان های برنامه نویسی مانند GO C++ Python C PHP SQL JS و… را تحت پوشش قرار داد