PDA

View Full Version : سوال: استفاده از typeid در دستور if



yaiiaj
پنج شنبه 08 تیر 1396, 15:15 عصر
سلام دوستان.

فرض کنیم یک template function داریم به این صورت:

template<typename T> int func(T inp)
{
.....
}

همونطور که مشخصه این تابع یک ورودی از نوع T و خروجی int خواهد داشت.
حالا فرض کنیم در بدنه تابع قصد دارم دستور if قرار بدم و در پرانتز مشخص کنم که اگر تایپ ورودی برای مثال int بود یه سری دستور یا اگر double بود یه سری دستور داشته باشیم و الی آخر.
در این باره سرچ کردم و در نهایت به این رسیدم که باید فایل سرآیند typeinfo رو include کنم و در پرانتز به این صورت بنویسم که:

if(typeid (inp) == typeid(int))
......

که در نهایت به جای int تایپهای دیگه هم میتونه قرار بگیره.
این موضوع رو مطرح کردم که نظر شما رو جویا بشم که آیا این روش درسته یا خیر و اگر اینطور نیست پیشنهاد شما چیه برای این کار؟ چون چند باری شده که به این موضوع تنوع تایپهای ورودی برخوردم.
متشکرم.

parvizwpf
پنج شنبه 08 تیر 1396, 16:58 عصر
این روش هم هست:
https://stackoverflow.com/questions/2265381/how-do-i-check-my-template-class-is-of-a-specific-classtype

حامد مصافی
پنج شنبه 08 تیر 1396, 17:46 عصر
میتونی برای انواعی که در نظر داری تمپلیت خاص ایجاد کنی.

// Example program
#include <iostream>
#include <string>


using namespace std;


template<typename T> int func(T inp)
{
cout << inp << endl;
}
template<> int func(int inp)
{
cout << inp << " is int" << endl;
}


int main()
{
std::string name = "sample string";
func(name);
func(4);
}

yaiiaj
پنج شنبه 08 تیر 1396, 18:58 عصر
این روش هم هست:
https://stackoverflow.com/questions/2265381/how-do-i-check-my-template-class-is-of-a-specific-classtype

ممنون از لطفت پرویز (http://barnamenevis.org/member.php?243106-parvizwpf) جان.


میتونی برای انواعی که در نظر داری تمپلیت خاص ایجاد کنی.

// Example program
#include <iostream>
#include <string>


using namespace std;


template<typename T> int func(T inp)
{
cout << inp << endl;
}
template<> int func(int inp)
{
cout << inp << " is int" << endl;
}


int main()
{
std::string name = "sample string";
func(name);
func(4);
}




بسیار عالی! specialization رو از قلم انداخته بودم http://www.pic4ever.com/images/Fuzzy_Emoticon_--fd.gif
لطف کردی حامد (http://barnamenevis.org/member.php?6808-%D8%AD%D8%A7%D9%85%D8%AF-%D9%85%D8%B5%D8%A7%D9%81%DB%8C) جان.