PDA

View Full Version : سوال: function templates/class templates



storm_saeed
پنج شنبه 27 تیر 1392, 17:13 عصر
سلام دوستان
من کلا تو بخش الگو تابع یکم مشکل دارم
اگه میشه یه توضیحی راجع به موارد زیر بدید ممنون
فرق و موارد استفاده این دوتا

template return-type name ( parameter-list ) > ;
template return-type < argument-list > name ( parameter-list ) ;اگه بجای template از extern template استفاده کنیم چه تفاوتی داره و کارکردش چیه
فرقtypename و class تو پارامتر ها چیه
وقتی میگیم template<xxx>به جای xxx چیارو میشه گذاشت مثلا بجاش بزاریم int 5 چه مفهومی داره
ویه سوال موارد استفاده الگو تابعی فقط در مورد گرانبار کردن تابع هاست یا کارکرد دیگه ای هم داره
با سپاس

brightening-eyes
پنج شنبه 27 تیر 1392, 18:44 عصر
شما فکر کن تو یه کلاس که میخوای تعریف کنی نمیدونی کدوم کجا تعریف میشه
مثلا یه static library مینویسی
مثلا:
template <class t>
class a
{
public:
a();
~a();
};
حالا میخوایم یه کلاس b از a استفاده کنه.class b <a>;
این تو کتابخونه smartwin++ یا boost هست
راجع به توابعم صدق میکنه
مثلا:
template <class c>
void d(int e)
{
c.x=e;
}

class myclass
{
public:
int x;
};
int y;
d<myclass>(y);

البته بگم همیشه مقدار مساوی نمیکنه
خیلی کارا میکنه
مثلا تو بوست random number میسازه
البته بگم بلد باشی ازش استفاده کنی جادو میکنه

*پست ویرایش شد ؛لطفاً کد ها رو درون ت مخصوص قرار بدبد.

storm_saeed
پنج شنبه 27 تیر 1392, 23:37 عصر
خیلی ممنون
اگه میشه یکم بیشتر میتونید توضیح بدید

brightening-eyes
جمعه 28 تیر 1392, 04:25 صبح
ببین کد نمیارم.
فرض کن یه base class داریم.
حالا ما میتونیم از ین بیس کلاس هر چی دلمون میخواد کلاس بسازیم.
حالا میخوایم فقط یه تایپ بهش بدیم که کلاس ما چی رو تو خودش نگه داره.
اگه vector رو بلد باشی میفهمی منظورم چیه.
vector یه کلاسه که شامل متغیرایی میشه که شما بهش میدین از نوعی که تو template استفاده میکنین.
حالا برا توابع هم همینطوره.
شما میتونین تو یه تابع یه کلاس یا متغیر رو تحت تأثیر قرار بدین.
سوال بود در خدمتم.

storm_saeed
جمعه 28 تیر 1392, 10:58 صبح
ممنون
یه سوال دیگه فرق template و extern template

brightening-eyes
جمعه 28 تیر 1392, 14:40 عصر
خیل خوبه
شما اگه فرق int و extern int رو بدونی اینم به همون مفهومه
ولی زیاد ازش استفاده نمیکنن.
چون کاربرد خاصی نداره.