c++ - যখন "এটি" একটি ল্যাম্বডা দ্বারা বন্দী হয়, তখন কি এটি স্পষ্টভাবে ব্যবহার করতে হবে?




lambda this-pointer (2)

আমি যে উদাহরণগুলি পেয়েছি যে ল্যাম্বডায় এটি ক্যাপচার করে এটি স্পষ্টভাবে ব্যবহার করে; উদাহরণ:

capturecomplete = [this](){this->calstage1done();};

তবে মনে হয় এটি সুস্পষ্টভাবে ব্যবহার করাও সম্ভব; উদাহরণ:

capturecomplete = [this](){calstage1done();};

আমি এটি জি ++ তে পরীক্ষা করেছি এবং এটি সংকলিত হয়েছে।

এই স্ট্যান্ডার্ড সি ++? (এবং যদি তাই হয় তবে কোন সংস্করণ), বা এটি কোনও প্রকারের এক্সটেনশান?



এটি স্ট্যান্ডার্ড এবং ল্যাম্বডাস যুক্ত হওয়ার পরে সি ++ 11 সাল থেকে এই পথে চলেছে। cppreference.com অনুসারে:

নাম অনুসন্ধানের উদ্দেশ্যে, this পয়েন্টারের ধরণ এবং মান নির্ধারণ এবং অ স্থিত শ্রেণীর সদস্যদের অ্যাক্সেসের জন্য, ক্লোজার টাইপের ফাংশন কল অপারেটরের মূল অংশটি ল্যাম্বডা-এক্সপ্রেশনের প্রসঙ্গে বিবেচনা করা হয়।

struct X {
    int x, y;
    int operator()(int);
    void f()
    {
        // the context of the following lambda is the member function X::f
        [=]()->int
        {
            return operator()(this->x + y); // X::operator()(this->x + (*this).y)
                                            // this has type X*
        };
    }
};




this-pointer