Pergunta

Eu tenho uma classe com várias funções de membro de modelo que gostaria de distribuir entre vários arquivos de origem para acelerar o tempo de compilação.(Os modelos são detalhes de implementação e não se destinam a serem usados ​​fora da classe, daí sua definição em fontes e não em cabeçalhos.)

Como eu dividiria esses modelos de forma que não recebesse erros do vinculador?Se eu tiver o arquivo de origem A usando um modelo definido no arquivo de origem B, como posso garantir que a instância apropriada do modelo seja construída pelo compilador?

Foi útil?

Solução

Eu não poderia responder melhor do que o FAQ do C++:
https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl

Outras dicas

Simplesmente não declare esses itens de modelo como parte da classe no arquivo de cabeçalho.Em seguida, defina seus modelos apenas no arquivo de origem.Por exemplo:

MinhaClasse.hpp

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

MinhaClasse.cpp

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

void MyClass::SomePublicMethod() const
{
    SomethingWithT(42);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top