انواع پارامترهای template در c++ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

انواع پارامترهای template در c++

0 امتیاز
سلام.

از جمله نوع template رایجی که ما در c++ استفاده می کنیم همین نوع رایجی هست که همش استفاده میشه و تقریبا همه چیز میشه بهش پاس داد بعضاْ هم در برخی از کد ها می بینیم به جای T مستقیم از خود نوع داده ای مثل int استفاده میشه .کلا چه مواردی برنامه نویس می تونه به عنوان template استفاده کنه؟
سوال شده خرداد 30, 1399  بوسیله ی farshid (امتیاز 137)   13 27 34
دوباره تگ گذاری شد خرداد 30, 1399

3 پاسخ

+1 امتیاز
 
بهترین پاسخ

تمپلت با پارامتر type :

 


template<typename T>
struct Container {
    T t;
};

// pass type "long" as argument.
Container<long> test;

تمپلت با پارامتر integer:

 


template<unsigned int S>
struct Vector {
    unsigned char bytes[S];
};

// pass 3 as argument.
Vector<3> test;

تمپلت با پارامتر اشاره گر (اشاره گر به تابع):


template<void (*F)()>
struct FunctionWrapper {
    static void call_it() { F(); }
};

// pass address of function do_it as argument.
void do_it() { }
FunctionWrapper<&do_it> test;

تمپلت  با پارامتر رفرنس( پاس دادن integer) : 


template<int &A>
struct SillyExample {
    static void do_it() { A = 10; }
};

// pass flag as argument
int flag;
SillyExample<flag> test;

 

پاسخ داده شده خرداد 30, 1399 بوسیله ی toopak (امتیاز 2,458)   16 48 66
انتخاب شد آذر 14, 1399 بوسیله ی farnoosh
+1 امتیاز

تمپلت  با پارامتر تمپلت  :


template<template<typename T> class AllocatePolicy>
struct Pool {
    void allocate(size_t n) {
        int *p = AllocatePolicy<int>::allocate(n);
    }
};

// pass the template "allocator" as argument. 
template<typename T>
struct allocator { static T * allocate(size_t n) { return 0; } };
Pool<allocator> test;

تمپلت بدون پارامتر یا همان مقدار پیش فرض :


template<unsigned int SIZE = 3>
struct Vector {
    unsigned char buffer[SIZE];
};

Vector<> test;

تمپلت به صورت <>template که بانام explicit template specialization :


template<>
struct Vector<3> {
    // alternative definition for SIZE == 3
};
پاسخ داده شده خرداد 30, 1399 بوسیله ی toopak (امتیاز 2,458)   16 48 66
ویرایش شده خرداد 30, 1399 بوسیله ی toopak
0 امتیاز

سلام؛ شما زمانی‌که نیاز به Meta programmin و یا Generic programming در سی‌پلاس‌پلاس داشته باشید می‌تونید از قابلیّت Templateهاش استفاده کنید. مثلاً یک نمونه می‌تونم به کتابخونهٔ STL یا nlohmann::json یا Tremplate engine inja اشاره کنم.

برای یادگیری مفاهیم و قابلیّت‌ها و روش استفادهٔ درست از Templateها در سی‌پلاس‌پلاس پیشنهاد می‌کنم که کتاب :

C++ templates: the complete guide template

ویرایش دوّم رو کنید.

پاسخ داده شده خرداد 30, 1399 بوسیله ی mg_ramezani (امتیاز 727)   1 1 12
...