چرا توابع pure virtual نمی توانند از template استفاده کنند؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

چرا توابع pure virtual نمی توانند از template استفاده کنند؟

+1 امتیاز
سلام مجدد.

چرا توابع pure virtual نمی توانند از template استفاده کنند؟  آیا راه حلی برای این مساله وجود داره؟
سوال شده مرداد 28, 1393  بوسیله ی Mad (امتیاز 245)   10 35 47
این جا توضیحاتی در این مورد هست: http://stackoverflow.com/questions/8919566/are-pure-virtual-methods-allowed-within-a-template-class
کلاس می‌تونه template باشه اما طبق چیری که اون جا نوشته تابع virtual نمی‌تونه باشه به خاطر مشکلات مربوط به vtable. (در هر حال تابع‌های virtual نمی‌تونن template باشن. این یه قانون در ++Cسه علتش هر چی باشه زیاد مهم نیست)
شاید بهتر باشه که تابع  عضو کلاس تعریف نشه ؟

1 پاسخ

+4 امتیاز
 
بهترین پاسخ
به نظر من دلیلش بخاطر Virtual Function Table  هست . (vtable)

چون template یه حالت برای درست کردن الگو هست تا با اون الگو بشه توابع و کلاسهای معینی درست کرد .

vtable یه جدول اشاره گر به توایعی مجازی اون کلاس هست و  توی هر کلاسی هم که حداقل یک تابع virtual داره vtable وجود داره .

و Compiler برای override کردن توابع virtual به یک شکل بودن تابع (مثلا نوع پارامترهاشون و تعدادشون و ... ) با تابعی که قراره روی اون override بشه اهمیت میده .

و template با تغییر نوع پارامترها و نوع برگشتی دقیقا این یک شکل بودن رو از اینجور توابع میگیره .
پاسخ داده شده مرداد 28, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد شهریور 5, 1393 بوسیله ی Mad
...