Analyse des STL-Quellcodes: Testen und Verstehen des expliziten Spezialisierungscodes der Klassenvorlage

Zweck: Um den STL-Quellcode zu verstehen, muss er durch Implementierung verstanden werden. Meiner Meinung nach handelt es sich bei diesem Modul um ein Verständnis der darin enthaltenen Spezialisierung, etwa der Instanziierung der Typen in der Vorlage. Beispielsweise muss eine allgemeine Vorlage einen beliebigen Typ haben, aber manchmal benötigen wir einen bestimmten Typ und die Vorlage stellt diese Funktion bereit. Der Testcode lautet wie folgt:

#include<iostream>
using namespace std;

#define __STL_TEMPLATE_NULL template<>

template<class key> struct myhash	//书上的代码是hash,它与我库中hash冲突
{
    
    
	void operator() (){
    
    std::cout << "hash<T>"<<std::endl;}
};

//explicit specialization
__STL_TEMPLATE_NULL struct myhash<char>
{
    
    
	void operator() (){
    
    std::cout << "hash<char>"<<std::endl;}
};

__STL_TEMPLATE_NULL struct myhash<unsigned char>
{
    
    
	void operator() (){
    
    std::cout << "hash<unsigned char>"<<std::endl;}
};

int main()
{
    
    
	myhash<long> t1;
	t1();
	myhash<char> t2;
	t2();
	myhash<unsigned char> t3;
	t3();
}

Die Ergebnisse des Tests sind wie folgt:
Fügen Sie hier eine Bildbeschreibung einEs ist ersichtlich, dass der Aufruf der Vorlage der Typ ist, der zuerst instanziiert wird.

Verständnis: Es gibt immer noch viele Funktionen der Vorlage, und das Verständnis ist für das Lesen von Code sehr nützlich.

おすすめ

転載: blog.csdn.net/weixin_43851636/article/details/122090305