Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Templat Luaran Boleh Mengoptimumkan Instantiasi Templat dalam C?

Bagaimanakah Templat Luaran Boleh Mengoptimumkan Instantiasi Templat dalam C?

Patricia Arquette
Lepaskan: 2024-12-12 21:52:14
asal
179 orang telah melayarinya

How Can Extern Templates Optimize Template Instantiation in C  ?

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
Salin selepas log masuk

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
Salin selepas log masuk

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();
Salin selepas log masuk
// source1.cpp
#include "header.h"
void f<int>();
Salin selepas log masuk
Salin selepas log masuk
// source2.cpp
#include "header.h"
void f<string>();
Salin selepas log masuk

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>();
Salin selepas log masuk
Salin selepas log masuk
// source2.cpp
#include "header.h"
extern template void f<int>();
void f<string>();
Salin selepas log masuk

Inti Utama

  • Gunakan templat luaran hanya apabila anda pasti bahawa templat akan digunakan di tempat lain dalam projek.
  • Templat ini digunakan untuk kedua-dua templat fungsi dan kelas templat, serta fungsi ahli templat.
  • Menggunakan templat luaran boleh mengurangkan masa penyusunan dan mengoptimumkan saiz fail objek dengan ketara, terutamanya apabila bekerja dengan templat yang besar atau kerap digunakan.

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!

sumber:php.cn
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