Kata kunci templat luaran dalam C 11 menyediakan mekanisme untuk menghalang instantiasi templat yang tidak perlu, mengurangkan masa penyusunan dan fail objek saiz. Dalam senario tertentu, adalah berfaedah untuk mengetahui bahawa templat akan dijadikan instantiated di tempat lain dan menggunakan kata kunci ini untuk mengarahkan pengkompil supaya tidak melakukan instantiation.
Bertentangan dengan contoh yang diberikan dalam soalan, kata kunci templat luaran juga boleh digunakan untuk fungsi templat. Pertimbangkan contoh berikut:
// header.h template<typename T> void bigFunc(); // source1.cpp #include "header.h" void something1() { bigFunc<int>(); } // source2.cpp #include "header.h" extern template void bigFunc<int>(); // This prevents its compilation in source2.cpp void something2() { bigFunc<int>(); }
Tanpa pernyataan templat luaran, bigFunc akan disusun dalam kedua-dua source1.cpp dan source2.cpp, menghasilkan kod objek berlebihan. Dengan menggunakan templat luaran, pengkompil diarahkan untuk tidak membuat instantiate bigFunc dalam source2.cpp, mengurangkan masa penyusunan dan saiz fail objek.
Seperti yang digambarkan dalam Rajah 2 soalan, templat luaran juga boleh digunakan untuk kelas templat:
// header.h template<typename T> class myClass { T getValue(); }; // source1.cpp #include "header.h" extern template class myClass<int>; // Prevent instantiation here void something1() { myClass<int> obj; obj.getValue(); }
Dalam senario ini, pengkompil diarahkan untuk tidak membuat instantiate myClass
Penggunaan templat luaran hendaklah dihadkan kepada situasi di mana ia berada diketahui bahawa templat akan digunakan di tempat lain. Jika ia tidak disegerakan, program akan menghasilkan rujukan yang tidak dapat diselesaikan. Sebagai amalan terbaik, adalah disyorkan untuk mengisytiharkan semua instantiasi templat dalam satu fail pengepala, mengelakkan kemungkinan masalah yang disebabkan oleh berbilang instantiasi dalam fail yang berbeza.
Atas ialah kandungan terperinci Bagaimanakah `templat luar` dalam C 11 Boleh Mengelakkan Instalasi Templat Berlebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!