Ushbu kod namunasida qanday shablon ixtisoslashuvidan foydalaniladi?


person user3414895    schedule 13.03.2014    source manba
comment
Bu menga ko'proq turdagi xususiyatlarga o'xshaydi.   -  person RedX    schedule 13.03.2014
comment
Yaxshi savol. Buning nomi bo'lishi kerak.   -  person Violet Giraffe    schedule 13.03.2014


Javoblar (2)


Bu is_vector<T> sinf shablonini (asosiy) belgilaydi va keyin uni T = std::vector<U> uchun qisman ixtisoslashtiradi.

Umumiy qoida juda oddiy:

Asosiy shablon:

template <something here> class someName /*no angle barckets here */ { ... }

Qisman mutaxassislik:

template <something here> class someName<otherThing here> { ... }

Aniq mutaxassislik:

template <> class someName<something here> { ... }

Iqtibos keltiradigan standartning qisqa qismi yo'q, lekin siz C++11[temp.class.spec] kichik bo'limiga murojaat qilishingiz mumkin. Ushbu bobda qisman ixtisoslikni ko'rsatgichlar va havolalar bilan cheklaydigan hech narsa yo'q. E'tibor bering, siz bergan MSDN havolasi ham o'z doirasini ular bilan cheklamaydi; misollar oldidan "kabi" deb aytiladi, bu boshqa imkoniyatlar yo'q degani emas.

person Angew is no longer proud of SO    schedule 13.03.2014
comment
Bu men joylagan msdn havolasi noto'g'ri yoki aniqrog'i to'liq emasligini anglatadimi? U faqat ko'rsatgich, ma'lumotnoma va hokazolarni eslatib o'tadi. Agar shunday bo'lsa, iltimos, biron bir dalil keltira olasizmi? - person user3414895; 13.03.2014

Bu qisman mutaxassislik. Sizning MSDN havolangiz qisman ixtisoslashuvning ikki turini tavsiflaydi va bu ikkinchisi:

  1. Shablon bir nechta turga ega va ulardan faqat ba'zilari ixtisoslashgan bo'lishi kerak. Natijada qolgan turlar bo'yicha parametrlangan shablon paydo bo'ladi.
  2. Shablon faqat bitta turga ega, lekin ko'rsatgich, mos yozuvlar, a'zoga ko'rsatgich yoki funktsiya ko'rsatkichi turlari uchun ixtisoslashuv zarur. Mutaxassislikning o'zi hali ham ko'rsatilgan yoki havola qilingan turdagi shablondir.

Nima uchun u qisman va aniq emas? Chunki ixtisoslashtirilgan shablonda hali ham uning barcha turdagi parametrlari toʻliq koʻrsatilmagan. Ixtisoslashgan versiya har qanday turdagi T vektori uchun tanlanadi. Siz uni std::vector ‹ int > bilan ishlash uchun yanada ixtisoslashtirishingiz mumkin - bu aniq ixtisoslik bo'ladi.

Bundan tashqari, aniq ixtisoslashuv uchun MSDN havolangizda "Qisman ixtisoslashuvdan foydalaning ... barcha ko'rsatkich turlari, mos yozuvlar turlari yoki massiv turlari kabi butun turlar to'plami uchun xatti-harakatni ixtisoslashtirishni xohlasangiz" deyiladi. "Such kabi" dan foydalanish ro'yxat to'liq emasligini aniq ko'rsatadi. ‹ T > vektoriga mos keladigan turlar to'plami yana bir "turlarning butun to'plami" dir.

person Graham Griffiths    schedule 13.03.2014
comment
Nima uchun bu ikkinchi ekanligini tushuna olmayapman: To'g'ri, shablon faqat bitta turga ega, ammo ixtisoslashuv ko'rsatkich, havola, a'zoga ko'rsatgich yoki funktsiya ko'rsatkichi turi emas. - person user3414895; 13.03.2014
comment
Mutaxassislikning o'zi hali ham ko'rsatilgan tur bo'yicha shablon, ya'ni ixtisoslikdagi tip parametri std::vector‹T›, shuning uchun u hali ham T ga bog'liq. - person Graham Griffiths; 13.03.2014
comment
To'g'ri, MSDN-dagi 2-turni tavsiflovchi birinchi jumla chalg'ituvchi bo'lishi mumkin - ro'yxat barcha imkoniyatlarni tugatmaydi. Ammo u yoki bu qisman bo'lishi kerak, chunki turdagi parametr to'liq emas. - person Graham Griffiths; 13.03.2014
comment
Agar bu to'g'ri bo'lsa, biron bir dalil, boshqa c++ havolasi yoki standartiga havola keltira olasizmi? - person user3414895; 13.03.2014
comment
Sizning aniq ixtisoslashuvingiz uchun MSDN havolasi barcha ko'rsatkich turlari, mos yozuvlar turlari yoki massiv turlari kabi butun turlar to'plami uchun xatti-harakatni ixtisoslashtirmoqchi bo'lganingizda Qisman ixtisoslashuvdan foydalaning ... deyiladi. bu ro'yxat to'liq emasligini aniq ko'rsatadi. Vektor‹T›-ga mos keladigan turlar to'plami boshqa turlarning butun to'plamidir - person Graham Griffiths; 13.03.2014
comment
Bu Josuttis kitobi deyarli C++ dagi andozalar Injilidir: josuttis.com/tmplbook u aniq ma'lumotlarni belgilaydi. Bu toʻliq almashtirilgan shablon parametrlari bilan shablonni amalga oshirishni taʼminlaydi: Hech qanday shablon parametrlari qolmaydi, bu sizning vektor‹T› uchun emasligi aniq. - person Graham Griffiths; 13.03.2014