Rumah > pembangunan bahagian belakang > C++ > Berikut adalah beberapa tajuk bahasa Inggeris yang sepadan dengan kandungan artikel: Tajuk ringkas (pendek dan langsung): * Bagaimana untuk Membina ScopeGuard Mudah dengan C 11 Idiom? * Melaksanakan ScopeGuard Mudah dalam C 11: Pendekatan Praktikal * C 11 ScopeGuard: A Ringkas dan Praktikal I

Berikut adalah beberapa tajuk bahasa Inggeris yang sepadan dengan kandungan artikel: Tajuk ringkas (pendek dan langsung): * Bagaimana untuk Membina ScopeGuard Mudah dengan C 11 Idiom? * Melaksanakan ScopeGuard Mudah dalam C 11: Pendekatan Praktikal * C 11 ScopeGuard: A Ringkas dan Praktikal I

Linda Hamilton
Lepaskan: 2024-10-26 10:12:03
asal
1078 orang telah melayarinya

以下是几个符合文章内容的英文标题:

简洁的标题(简短且直接):

* How to Build a Simple ScopeGuard with C  11 Idioms? 
* Implementing a Simple ScopeGuard in C  11: A Practical Approach
* C  11 ScopeGuard: A Concise and Practical Implementation

更详细的标题(阐明文章重点):

* C  11 ScopeGuard: A S

SkopGuard yang ringkas dan praktikal dalam C 11

Soalan:

Cara menggunakan simpulan bahasa C 11 untuk menulis berdasarkan Alexandrescu konsep Simple ScopeGuard?

Jawapan:

Berikut ialah pelaksanaan ScopeGuard berdasarkan simpulan bahasa C 11:

<code class="cpp">namespace RAII
{
    template< typename Lambda >
    class ScopeGuard
    {
        mutable bool committed;
        Lambda rollbackLambda; 
        public:

            ScopeGuard( const Lambda&amp; _l) : committed(false) , rollbackLambda(_l) {}

            template< typename AdquireLambda >
            ScopeGuard( const AdquireLambda&amp; _al , const Lambda&amp; _l) : committed(false) , rollbackLambda(_l)
            {
                _al();
            }

            ~ScopeGuard()
            {
                if (!committed)
                    rollbackLambda();
            }
            inline void commit() const { committed = true; }
    };

    template< typename aLambda , typename rLambda>
    const ScopeGuard< rLambda >&amp; makeScopeGuard( const aLambda&amp; _a , const rLambda&amp; _r)
    {
        return ScopeGuard< rLambda >( _a , _r );
    }

    template<typename rLambda>
    const ScopeGuard< rLambda >&amp; makeScopeGuard(const rLambda&amp; _r)
    {
        return ScopeGuard< rLambda >(_r );
    }
}</code>
Salin selepas log masuk

Penggunaan:

<code class="cpp">void SomeFuncThatShouldBehaveAtomicallyInCaseOfExceptions() 
{
   std::vector<int> myVec;
   std::vector<int> someOtherVec;

   myVec.push_back(5);
   //first constructor, adquire happens elsewhere
   const auto&amp; a = RAII::makeScopeGuard( [&amp;]() { myVec.pop_back(); } );  

   //sintactically neater, since everything happens in a single line
   const auto&amp; b = RAII::makeScopeGuard( [&amp;]() { someOtherVec.push_back(42); }
                     , [&amp;]() { someOtherVec.pop_back(); } ); 

   b.commit();
   a.commit();
}</code>
Salin selepas log masuk

Kelebihan:

  • Mudah dan mudah digunakan
  • Kod ringkas
  • Menyokong pengendalian pengecualian

Isu berpotensi:

  • Jika fungsi advise lambda membuang pengecualian, fungsi lambda keluaran tidak akan dipanggil kerana ia tidak pernah membina ScopeGuard sepenuhnya.
  • Jika fungsi pembersihan membuang pengecualian, atur cara akan ditamatkan secara tidak dijangka.

Atas ialah kandungan terperinci Berikut adalah beberapa tajuk bahasa Inggeris yang sepadan dengan kandungan artikel: Tajuk ringkas (pendek dan langsung): * Bagaimana untuk Membina ScopeGuard Mudah dengan C 11 Idiom? * Melaksanakan ScopeGuard Mudah dalam C 11: Pendekatan Praktikal * C 11 ScopeGuard: A Ringkas dan Praktikal I. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan