shablonli sinfda shablonli funksiyaning aniq namunasi

Sinfning sarlavha fayli quyidagicha:

 enum class My_Type {
     type1,
     type2
 };

 template <int dim>
 class My_Class {
 public:
     My_Class() {};

     template <My_Type p_type>
     void
     func();
 }

cpp fayli:

template <int dim>
template <My_Type p_type>
void
My_Class<dim>::func() {
     if (p_type==My_Type::type1) {
         ...
     } else {
         ...
     }
     ....
}

qo'ng'iroq quyidagicha:

My_Class<2> my_obj;
my_obj.template func<My_Type::type1>();

Hammasi yaxshi tuzilgan, lekin bog'lanmaydi:

'Undefined symbols for architecture x86_64'

Buning sababi, kodning bir qismi kutubxona ichida. Shunday qilib, men aniq ifodalashim kerak.

Sinf uchun bu aniq:

 template class My_Class<2>;

Savol shundaki, bunday holatda shablonli funktsiyani qanday yaratishim mumkin? Har qanday fokuslar yoki vaqtinchalik echimlar?

p/s/ enum dan ko'rib turganingizdek, agar muhim bo'lsa, men C++ 11 dan foydalanaman.

p/p/s/ Men bir nechta havolalarni ko'rib chiqdim, lekin yechimni ko'rganimga ishonchim komil emas.


person Denis    schedule 04.06.2013    source manba
comment
Agar siz barcha foydali misollarning to'liq cheklangan to'plamini bilsangiz, buni shunday qilish mumkin, lekin odatda barcha shablon ta'riflarini sarlavha fayllariga qo'yish osonroq. (Va int parametriga ega bo'lish faqat bir nechta mumkin bo'lgan misollarga ega bo'lishi kerak kabi ko'rinmaydi.)   -  person aschepler    schedule 04.06.2013
comment
@aschepler maslahat uchun rahmat. agar narsalar katta bo'lsa, men ta'riflarni sarlavhaga o'tkazaman. Hozircha ikkala shablonli argumentlar uchun jami 4 ta variantim bor.   -  person Denis    schedule 04.06.2013


Javoblar (1)


Qizig'i shundaki, sinov va xato orqali men to'g'ri sintaksisni chiqardim:

template class MyClass<2>;
template void MyClass<2>::func< My_Type::type1>();
template void MyClass<2>::func< My_Type::type2>();
person Denis    schedule 04.06.2013