Dada uma classe de modelo como a seguinte:
template<typename Type, typename IDType=typename Type::IDType>
class Mappings
{
public:
...
Type valueFor(const IDType& id) { // return value }
...
};
Como alguém pode declarar essa classe em um arquivo de cabeçalho?
c++
templates
forward-declaration
Tron Thomas
fonte
fonte
Você pode declarar argumentos padrão para um modelo apenas para a primeira declaração do modelo. Se você deseja permitir que os usuários declarem um modelo de classe, você deve fornecer um cabeçalho de encaminhamento. Se você deseja declarar o template de classe de outra pessoa usando padrões, você está sem sorte!
fonte
Você pode declarar uma classe modelada cuja definição declara os argumentos padrão, mas sempre que fizer referência à classe, deverá incluir todos os seus argumentos até que a definição seja introduzida.
por exemplo. Vamos usar
std::vector
sem incluí-lo (o segundo argumento destd::vector
é definido com um padrão):Podemos então usá-lo sem incluir o vetor, por exemplo:
E podemos usá-lo com
std::vector
, por exemplo:Não verifiquei os padrões, mas isso funciona em
clang
/gcc
com-std=c++98
até-std=c++17
, então, se não for oficialmente um padrão, parece que não é oficial.fonte
Foo<> foo;
.