PDA

View Full Version : حرفه ای: template با آرکومانی از template



rasoolll
جمعه 06 دی 1392, 19:46 عصر
سلام. ممنون میشم اگه کسی این کد رو دقیق بتونه برام تشریح کنه. با تشکّر
#include <iostream>
using namespace std;

template<class T, class U> class A {
int x;
};

template<class U> class A<int, U> {
short x;
};

template<template<class T, class U> class V> class B {
V<int, char> i;
V<char, char> j;
};

B<A> c;

int main() {
cout << typeid(c.i.x).name() << endl;
cout << typeid(c.j.x).name() << endl;
}

amin1softco
جمعه 06 دی 1392, 20:27 عصر
والا اینجا خر تو خر شده بیشتر تا برنامه نویسی :دی
خوب اول یک کلاس A داریم با دو نوع مجزا که داخلش x از نوع عددی تعریف شده
بعدش یک کلاس A داریم که نوع U متغیر است ولی طبق سینتکس زیر به کار نمیره اگر درست گفته باشم:
template <> class mycontainer <char> { ... };
و در آخر کلاس B از نوع تملپیت کلاس V ایجاد شده که خودش دارای دو نوع مجزا T ,U است .
بعد اومده گفته از نوع کلاس A کلاس B را با نام cتعریف کن
ولی به نظرم اشاره گری چیزی مجازی در بیاد ازش درست یادم نیست

rasoolll
جمعه 06 دی 1392, 20:40 عصر
ممنون ولی این چند خط رو هر کارش میکنم هضم نمیشه!

template<template<class T, class U> class V>
class B {
V<int, char> i;
V<char, char> j;
};

B<A> c;

یا مثلاً اگه اینو کامل متوجه بشم مشکل حل میشه! فکر کنم برداشت من از این اشتباه بوده! این قطعه کد رو توضیح بدید اگه میشه.

template <class T>
class BBB {

};

template <class T, class U = BBB<T>>
class AAA {

};

amin1softco
جمعه 06 دی 1392, 21:05 عصر
والا من که نمی دونم اینقدر پیچ و تاب برای چیه ولی حوصله داشتی اینو بخون http://www.codeproject.com/Articles/257589/An-Idiots-Guide-to-Cplusplus-Templates-Part-1 هضم شدش را برای ما هم بگو ;)

omidshaman
جمعه 06 دی 1392, 21:19 عصر
ممنون ولی این چند خط رو هر کارش میکنم هضم نمیشه!

template<template<class T, class U> class V>
class B {
V<int, char> i;
V<char, char> j;
};

B<A> c;

یا مثلاً اگه اینو کامل متوجه بشم مشکل حل میشه! فکر کنم برداشت من از این اشتباه بوده! این قطعه کد رو توضیح بدید اگه میشه.

template <class T>
class BBB {

};

template <class T, class U = BBB<T>>
class AAA {

};
حالت پیش فرض متغیر دوم AAA از نوع BBB هستش یعنی اگر دکر نشه اونو میزاره
یعنی مثلا
AAA<int> a=== AAA<int,BBB<int> > a

omidshaman
جمعه 06 دی 1392, 21:31 عصر
template<class T, class U>
class A
{
public:
int x;
};

template<class U>
class A<int, U>
{
public:
short x;
};

این یعنی اگر template ای که ساخته میشه اولیش int بود بیاد x رو از نوع short بسازه یعنی یک شی از دومی بسازه
اگر int نبود یک شی از اولی

بقیه کد هم چیز خاصی نداره یک کلاس با nested template هست و یک شی که ازش ساخته شده.