web-dev-qa-db-fra.com

Comment transférer une classe de modèle C ++?

Étant donné une classe de modèle comme suit:

template<typename Type, typename IDType=typename Type::IDType>
class Mappings
{
public:
    ...
    Type valueFor(const IDType& id) { // return value }
    ...
};

Comment quelqu'un peut-il déclarer cette classe dans un fichier d'en-tête?

73
Tron Thomas

Voici comment vous le feriez:

template<typename Type, typename IDType=typename Type::IDType>
class Mappings;

template<typename Type, typename IDType>
class Mappings
{
public:
    ...
    Type valueFor(const IDType& id) { // return value }
    ...
};

Notez que la valeur par défaut se trouve dans la déclaration de transfert et non dans la définition réelle.

84
Pubby

Vous pouvez déclarer les arguments par défaut d'un modèle uniquement pour la première déclaration du modèle. Si vous souhaitez autoriser les utilisateurs à transmettre un modèle de classe, vous devez fournir un en-tête de transfert. Si vous souhaitez transférer le modèle de classe de quelqu'un d'autre à l'aide des valeurs par défaut, vous n'avez pas de chance!

7
Dietmar Kühl