PDA

View Full Version : کاربرد typename چیست (غیر از الگو)



asdasd123123
شنبه 03 اسفند 1392, 15:21 عصر
سلام دوستان مثلا این کد یعنی چی؟

typedef typename A B;

amirhossein.ha
شنبه 03 اسفند 1392, 17:06 عصر
منظور از typename اسم یه نوع از متغیر ها هست مثلا int , double , char , string
اون دستور هم برای کوتاه کردن اسم نوع متغیر ها به کار میره مشابه دستور define مثلا :‌

typedef long double ld;
typedef long long int ll;
typedef unsigned long long int ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

این هم با define :

#define ld long double
#define ll long long int
#define ull unsigned long long int
#define pii pair<int,int>
#define pll pair<ll,ll>


این دو تکه کد دقیقا مشابه همدیگه عمل میکنن

مصطفی ساتکی
شنبه 03 اسفند 1392, 20:04 عصر
به صورت کامل در اینجا (http://www.7khatcode.com/1740/%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-typedef-%DA%86%DB%8C%D9%87-%D8%9F) توضیح داده شده.

rahnema1
شنبه 03 اسفند 1392, 23:07 عصر
سلام
این مورد در خصوص تمپلیت ها استفاده میشه هنگامی که شما می خواهید در داخل تمپلیت از یک نوع تو در تو ( مثل یک کلاس در برگیرنده یک کلاس دیگه) استفاده کنید
که این نوع به عنوان پارامتر تمپلیت به اون تمپلیت معرفی شده
نوع بیرونی به عنوان پارامتر تمپلیت معرفی شده و ما می خواهیم در داخل تمپلیت از نوع درونی استفاده کنیم
برای این کار لازمه از کلمه typename استفاده کنیم
در مثال زیر یک کلاس تودرتو تعریف می کنیم شامل کلاس بیرونی X و کلاس درونی Y و می خواهیم در تمپلیت از Y استفاده کنیم
حالا می تونیم از typedef هم استفاده کنیم تا به این عبارت طولانی typename T::Y یک اسم مستعار مثل TY بدهیم که کارمون راحت تر بشه


#include <iostream>
using namespace std;
class X
{
int a;
public: class Y
{
public:int b;
};
};
template<class T> class Z
{
public:
void f()
{
typename T::Y a1;
a1.b=3;
cout<<a1.b<<endl;
typedef typename T::Y TY;
TY a2;
a2.b=4;
cout<<a2.b;
}
};
int main()
{
Z<X> z1;
z1.f();
}