Menggunakan Templat Luaran untuk Mengoptimumkan Instantiasi Templat
Dalam C 11, templat luaran ialah kata kunci yang berkuasa yang boleh digunakan untuk mengelakkan instantiasi berlebihan bagi templat, terutamanya apabila berbilang unit terjemahan (cth., fail .cpp) mungkin termasuk fail pengepala yang sama yang mengandungi templat takrifan.
Konsep Templat Luaran
Templat Luaran pada asasnya memberitahu pengkompil bahawa unit terjemahan semasa tidak seharusnya membuat instan templat tertentu, walaupun ia diisytiharkan dalam disertakan pengepala. Ini berguna apabila anda mengetahui bahawa templat akan dijadikan instantiated dalam unit terjemahan yang berbeza bagi projek yang sama.
Penggunaan untuk Templat Fungsi
Untuk templat fungsi, extern pengisytiharan templat boleh digunakan seperti berikut:
#include "header.h" extern template void f<T>(); // Avoid instantiation in this translation unit
Ini menunjukkan bahawa templat f akan ditakrifkan di tempat lain dalam projek dan tidak sepatutnya dijadikan instantiated dalam fail semasa.
Penggunaan untuk Templat Kelas
Begitu juga, untuk templat kelas, pengisytiharan templat luaran mengambil bentuk berikut:
#include "header.h" extern template class foo<int>; // Avoid instantiation in this translation unit
Ini memastikan bahawa kelas templat foo tidak digunakan dalam terjemahan khusus ini unit.
Aplikasi Pengoptimuman
Pertimbangkan senario berikut:
// header.h template<typename T> void f();
// source1.cpp #include "header.h" void f<int>();
// source2.cpp #include "header.h" void f<string>();
Tanpa templat luaran, kedua-dua sumber1.cpp dan source2.cpp akan membuat seketika templat f, yang membawa kepada pelbagai definisi dan masa penyusunan yang terbuang. Dengan menggunakan templat luaran dalam salah satu fail, kami mengelakkan lebihan ini:
// source1.cpp #include "header.h" void f<int>();
// source2.cpp #include "header.h" extern template void f<int>(); void f<string>();
Inti Utama
Atas ialah kandungan terperinci Bagaimanakah Templat Luaran Boleh Mengoptimumkan Instantiasi Templat dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!