Domanda

Ho una classe con diverse funzioni membro modello che vorrei distribuire tra diversi file sorgente per accelerare i tempi di compilazione. (I modelli sono dettagli di implementazione e non sono destinati ad essere utilizzati al di fuori della classe, e quindi la loro definizione in non fonti intestazioni.)

Come potrei fare per suddividere questi modelli in modo tale che un non voglio entrare errori del linker? Se ho file sorgente Un utilizzando un modello definito nel file sorgente B, come faccio a fare in modo l'istanza corrispondente del template è costruito dal compilatore?

È stato utile?

Soluzione

Non ho potuto rispondere meglio di C ++ FAQ:
https://isocpp.org/wiki/faq/templates#templates- defn-vs-decl

Altri suggerimenti

Semplicemente non dichiarare tali elementi del modello come parte della classe nel file di intestazione. Quindi, definire i modelli solo nel file sorgente. Ad esempio:

MyClass.hpp

class MyClass
{
public:
    void SomePublicMethod() const;
};

MyClass.cpp

template<class T>
void SomethingWithT(T myVal)
{
    // ...
}

void MyClass::SomePublicMethod() const
{
    SomethingWithT(42);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top