Xavier Lamorlette

C++ : Templates

Spécialisation de template

template<typename T>
class Template {
   void foo(T param) {
   }
};

template<>
class Template<int> {
   void foo(int param) {
   }
};

External Templates

External templates stop implicit instantiations (possibly duplicated in several translation units). It needs of course one explicit instantiation in a translation unit.

template<typename T> class A {…};
extern template class T<someType>,

Variadic Templates

Ce qui est devant l'oppérateur points de suspension (ellipsis operator), ..., est répété, avec une virgule entre chaque répétition :

... répète toute l'expression comprenant un parameter pack. Exemple : foo(bar(args)...).

Exemples :

template<typename T>
T Sum(T value) {
    return value;
}

template<typename T, typename ... Args>
T Sum(T first, Args ... args) {
    return first + Sum(args ...);
}

template<typename T>
T Sum(const T & value) {
    return value;
}

template<typename T, typename ... Args>
T Sum(const T & first, const Args & ... args) {
    return first + Sum(args ...);
}

template<typename ... Args>
class Variadic_template {
    static const uint8_t size = sizeof ...(Args);
};

La dernière mise à jour de cette page date d'août 2020.

Le contenu de ce site est, en tant qu'œuvre originale de l'esprit, protégé par le droit d'auteur.
Pour tout commentaire, vous pouvez m'écrire à xavier.lamorlette@gmail.com.