PDA

View Full Version : یه مشکل اساسی در مورد template



yasi.88
یک شنبه 11 مرداد 1388, 22:47 عصر
من یه برنامه دارم که با template سربار گذاری شده.حالا واسه همه نوع داده جواب میده جز نوع داده ی char * مگر این نوع داده برای اون سربار گذاری نشده!:عصبانی++:در واقع عمل مقایسه کردنه که چون فکر میکنم template همون == رو واسه رشته به عنوان strcmp در نظر بگیره...اما این کارو نمی کنه !! تو رو خدا یکی بگه چه کار کنم!

Salar Ashgi
یک شنبه 11 مرداد 1388, 22:54 عصر
سلام ، مفهوم تساوی برای دو عدد اعشاری و دو رشته یکی

نیست .

تابعی برای مقایسه دو رشته :



#include <iostream>
#include <conio>
#include <string>
bool Equal(char a[],char b[]){
int k=0;
for(int i=0;i<strlen(a);i++){
if(a[i] == b[i])
k++;
}
if(k==strlen(a))
return true;
else
return false;
}

pswin.pooya
دوشنبه 12 مرداد 1388, 21:13 عصر
نوع داده char* یه اشاره گر هستش به نوع داده ای سی هستش. و عملگر == برای اونها (رشته های متنهای با صفر) ساخته نشده. اگر شما میخوایید از رشته ها داخل سی ++ استفاده کنن بهتره از کلاسهای مربوطه مثل std::string استفاده کنین که این عملگر برای اون پیاده سازی شده. توجه بکنین که template ها از عملگر مساوی برای همه نوع داده استفاده میکنن./

yasi.88
دوشنبه 12 مرداد 1388, 22:45 عصر
ممنون از جوابتون.اما رشته مگر یه نوع داده حساب نمیشه!!:متفکر: تازه من که نمی دونم داده ای که واسه یه سری از عملیت به یه تابع قالبی اومده رشته هست یا نوع داده ی دیگر... سربار گذاری مساوی برای رشته بر عهده ی template است نه من!!!:ناراحت:

yasi.88
سه شنبه 13 مرداد 1388, 22:27 عصر
[quote=CppBuilder2006;772008]فکر میکنم برنامه ای دنبالش هستید این باشد:

[code]
#include <conio.h>
#include <iostream>
using namespace std;

template <typename T>
bool Equal(T a,T b)
{
if(typeid(T).name() == typeid(char*).name())
{
int k=0;
for(unsigned i = 0; i < strlen(a);i++)
{
if(a[i] == b[i])
k++;
}
if(k==strlen(a))
return true;
return false;
}
else
return a == b;
}

int main()
{
char * a = "hello";
char b[] = {'h','e','l','l','o'};
if(Equal(a,b))
cout<< "equal";
_getch();
}

وای دقیقا ...خیلی خیلی ممنونم...