C++11: Explizite Instanziierung Deklaration vs. explizite Instantiierung definition

Was ist der Unterschied zwischen C++03 die explizite template-Instantiierung definition und C++11, die explizite template-Instantiierung Erklärung ?

Was ich meine ist, warum die Instanziierung definition ist nicht genug, um zu verhindern, dass der compiler generiert die Umsetzung für andere Arten ? Was ist falsch in dem unten angeführten Beispiel: Stell dir vor, ich teilte die template-Deklaration und-definition in zwei separate Dateien:

A. h

#pragma once

template<typename T>
class A
{
public:
    A(T t);

private:
    T _t;
};

A.cpp

#include "A.h"

template<typename T>
A<T>::A(T t) : _t(t) {}

template class A<int>; //explicit instantiation

main.cpp

#include "A.h"

int main()
{
    A<int> a(5); //fine, compiler generates header file,
                 //linker links with implementation from A.cpp file

    //A<float> b(3.14f); //linker error, as expected
}

Gibt es eine Zusammenstellung zusätzlicher Verarbeitungsaufwand im Beispiel oben? Wenn ich das richtig verstehe, in diesem Fall mit expliziter Instanziierung definition in eine separate *.cpp-Datei (zusammen mit der template-Umsetzung) mache ich den compiler nicht implizit instanziieren Sie das template mit anderen Arten. Als solche, weshalb es eine separate syntax für explizite Instanziierung Deklaration ?

Wie kann explizite Instantiierung Erklärung Beschleunigung der Kompilierung, ob ich SCHON versteckt, die Umsetzung in A.cpp Datei explizite Instanziierung definition, und verhindert compiler generiert Körpers für andere Arten. Ist die "explizite Instanziierung Deklaration" irgendwie verwandt "explizite Instantiierung definition", meine ich, sollte ich beide, oder sind das völlig separate Funktionen (z.B. explizite Instanziierung Deklaration kann nur verwendet werden, wenn die explizite Instanziierung definition nicht verwendet wurde) ?

Denke ich Recht, dass die explizite Instantiierung definition ist nur zum Fehler auslösen, wenn kein anderer übersetzungseinheit instantiiert die Vorlage mit gegebenen Typ?

Schreibe einen Kommentar