PDA

View Full Version : سوال: خروجی یک تابع



hafez1
یک شنبه 11 مرداد 1394, 00:21 صبح
سلام دوستان.
من یک تابع دارم که خروجی اون دوتا کلید k1 و k2 برمیگردونه.
میخواستم ببینم اگه بنویسم return K1,K2; سمتی که این رو دریافت میکنه چطور میفهمه که این دوتا از کجا تفکیک میشن؟
راه دیگه ای هم داره؟

ehsan_faal
یک شنبه 11 مرداد 1394, 09:39 صبح
سلام.
اونطوری که شما میخوای از return استفاده کنی توی پایتون استفاده میشه نه ++C .
اینجا میتونی داده هات رو بریزی توی یه Container مثله وکتور و بعد اون رو return کنی.

کامبیز اسدزاده
یک شنبه 11 مرداد 1394, 10:02 صبح
از وکتور و یا موارد دیگری مثل tuple و یا pair استفاده کنید :

http://en.cppreference.com/w/cpp/utility/tuple
http://en.cppreference.com/w/cpp/utility/pair

من در پروژه هام از Tuple استفاده میکنم خیلی خوب جواب میده.

hafez1
یک شنبه 01 شهریور 1394, 21:37 عصر
ببخشید دوستان من از tuple توی ویژوال 2010 استفاده کردم به این صورت:


std::tr1::tuple< int, int, int> tango3(int n,unsigned int a, unsigned int b, unsigned int d,unsigned int e ,unsigned int f,unsigned int k1,unsigned int k2,unsigned int ID)
{
داخل تابع یسری محاسبات
return std::make_tuple(reco_k1,reco_k2,reco_id);
}
بعد داخل main این رو صدا زدم
std::tie(k1_reco, k2_reco, ID_reco)=tango.tango3(i,A,B,D,E,F,k1,k2,ID);


ولی این ارورارو میده:
134585

ارور برای چیه؟

a.r.khoshghalb
دوشنبه 02 شهریور 1394, 20:46 عصر
تمپلیت هایی مثل pair خوب هستن ولی میتونید هم خودتون یه کلاس بنویسید برای کدتون.
مثلا اگر قراره 2 تا خروجی از جنس ReturnType داشته باشید (که میتونه int یا string یا یه کلاس دیگه باشه...) اینکارو کنید:

struct Data{

ReturnType a,b;

Data(ReturnType f, ReturnType s)
{
a = f;
b = s;
}

};

و توی تابعتون وقتی میخواید خروجی بدید:

Data myFunction(...Inputs...)
{
...Do Some Stuff Here...
return Data(k1, k2);
}




و جایی که دارید خروجی این تابع رو دریافت میکنید:

myOtherFunction(...Inputs...)
{
Data output = myFunction(...Inputs...);
ReturnType k1 = output.a;
ReturnType k2 = output.b;
}


کل کد: (تو خط اول جای YourType نوع متغیر های خروجی رو بذارید، مثلا int یا double یا string یا یه کلاس...)

typedef YourType ReturnType_

struct Data{

ReturnType_ a,b;

Data(ReturnType_ f, ReturnType_ s)
{
a = f;
b = s;
}

};

Data myFunction(...Inputs...)
{
...Do Some Stuff Here...
return Data(k1, k2);
}

myOtherFunction(...Inputs...)
{
Data output = myFunction(...Inputs...);
ReturnType_ k1 = output.a;
ReturnType_ k2 = output.b;
}