Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah `templat luar` dalam C 11 Boleh Mengelakkan Instalasi Templat Berlebihan?

Bagaimanakah `templat luar` dalam C 11 Boleh Mengelakkan Instalasi Templat Berlebihan?

DDD
Lepaskan: 2024-12-20 14:59:13
asal
317 orang telah melayarinya

How Can `extern template` in C  11 Avoid Redundant Template Instantiations?

Mengelakkan Instantiasi Templat dengan templat luaran (C 11)

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.

Penggunaan untuk Templat Fungsi

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>();
}
Salin selepas log masuk

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.

Penggunaan untuk Templat Kelas

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();
}
Salin selepas log masuk

Dalam senario ini, pengkompil diarahkan untuk tidak membuat instantiate myClass dalam source1.cpp, memastikan ia digunakan sekali sahaja dalam projek.

Pertimbangan Penting

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan