std::forwrad یعنی چی؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

std::forwrad یعنی چی؟

+1 امتیاز
سلام

 

در مورد std::forward تو فصل template ها خوندمش ولی سر در نیاوردم کجا کاربرد داره؟
سوال شده آذر 10, 1392  بوسیله ی AmiKhan (امتیاز 21)   3 3 5
دوباره تگ گذاری شد فروردین 3, 1393 بوسیله ی BlueBlade

1 پاسخ

+2 امتیاز

از std::forward برای prefect forwarding استفاده میشه کاری هم که می کنه ایته که اگر مقدار ورودی   lvalue نباشه rvalue refrence بر می گردونه در غیر این صورت همون lvalue

پیاده سازیشم بر اساس قواعد universal refrence  , تبدیل داده به داده مورد نظر هستش .( هر ۲ مورد رو داخل لینک پایین توضیح دادم)

static_cast<T&&>(t)

مثال زیر رو ببین :

void func(const int&)
{
    cout<<"in lvalue\n";
}
void func(int&&)
{
    cout<<"in rvalue\n";
}

template<class T>//universal refrence
auto  myForward(T&& v)->decltype(static_cast<T&&>(v))
{
    return static_cast<T&&>(v);
}

int main()
{
    int i=2;

    func(myForward(i));

    func(myForward(2));
}

خروجی :

in lvalue

in rvalue

در مورد perfect forwarding  , universal refrence لینک زیر رو ببین :

http://www.7khatcode.com/43/%D9%85%D9%86%D8%B8%D9%88%D8%B1-%D8%A7%D8%B2-move-semantics-%D8%AF%D8%B1-c-11-%DA%86%DB%8C%D9%87-%D8%9F

 

پاسخ داده شده اسفند 11, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
...