PDA

View Full Version : الگوی(template) محدود



Sepidar
جمعه 19 خرداد 1385, 15:15 عصر
سلام
فرض کنید یه کلاس ابسترکت پایه داریم به اسم ClassA و میخوایم کلاس ClassB کلاس تمپلیتی باشه که از A یا فرزندان A به ارث برده میشه. برای این کار راه حلی هست؟

Inprise
یک شنبه 21 خرداد 1385, 09:52 صبح
توضیح : من واقعا" سوالت رو نفهمیدم

Sepidar
دوشنبه 22 خرداد 1385, 10:40 صبح
خوب بذار اینجوری بگم.
کد زیر رو در نظر بگیر:


class ClassU{};

class ClassA
{
protected:
virtual void SomeProc()=0;
};

class ClassA1:public ClassA
{
protected:
virtual void SomeProc();
};
void ClassA1::SomeProc()
{
// DoSomething();
}
تا اینجا ما یه کلاس ابسترکت داریم به اسم ClassA و یه کلاس فرزند این کلاس به اسم ClassA1 . همچنین یه کلاس کاملا مجزا داریم به اسم ClassU .

حالا تمپلیت زیر رو در نظر بگیر:


template <class Parent>
class ClassB:public Parent
{
public:
void AnotherProc();
};
template <class Parent> void ClassB<Parent>::AnotherProc()
{
Parent::SomeProc();
}
اینجا ما گفتیم که کلاس ClassB داره داره از کلاسی مشتق میشه که حتما متد SomeProc رو داره. اما هیچ کنترلی نداریم که پارامتر تمپلیت حتما از جنس ClassA یا مشتقاش باشه؛ بلکه هر کلاسی که متد SomeProc رو داشته باشه میتونه به جای Parent بشینه.

سوال من در مورد همین کنتزل آخره که تاکید کنیم که اون Parent که ClassB ازش داره ارث میبره حتما یکی از مشتقای ClassA هستش.

ممنون

Inprise
دوشنبه 22 خرداد 1385, 11:04 صبح
RTTI .

Sepidar
دوشنبه 22 خرداد 1385, 17:31 عصر
توضیح بیشتر لطفا

Sepidar
چهارشنبه 24 خرداد 1385, 10:31 صبح
عارضم که اگه مفهوم RTTI رو درست متوجه شده باشم، این کنترل نوع منطقا نباید در زمان اجرا اتفاق بیافته، بلکه کنترلیه در سطح لینکر باید انجام بشه

Inprise
چهارشنبه 24 خرداد 1385, 20:03 عصر
Runtime Type Information
(http://www.codeguru.com/Cpp/Cpp/cpp_mfc/rtti/article.php/c4061)

Sepidar
یک شنبه 13 شهریور 1390, 15:01 عصر
C++0x concepts
boost library concepts

sh4mid
یک شنبه 13 شهریور 1390, 21:40 عصر
The Rise and Fall of C++0x Concepts (http://www.devx.com/cplus/Article/42365/0/page/1)
Concepts Get Voted Off The C++0x Island
(http://lambda-the-ultimate.org/node/3518)
ان شالله در نسخه های بعدی میاد :لبخند: