Je voulais écrire un exemple simple pour t'aider, parce qu'il me semblait qu'il y avait un petit piège. En effet, tu ne peux pas spécialisé partiellement un template sur une fonction, mais sur une classe oui. J'ai fait un truc comme ça si tu veux voir comment faire de la spécialisation partielle.
Mais en fait je me suis dis que tu ne devais sûrement pas avoir de comportement par défaut, donc un assert est plus approprié, j'opterais plus pour une solution comme ça :
#include <iostream>
#include <string>
#include <type_traits>
template< typename Type >
void print(const Type & val)
{
static_assert(std::is_arithmetic<Type>::value, "print should work with arithmetics value");
std::cout << val << " is a number" << std::endl;
}
struct People {
std::string name;
std::string surname;
};
template<> void print<People>(const People & val)
{
std::cout << "My name is " << val.name << " " << val.surname << std::endl;
}
int main()
{
print(People{"Jean", "Dupond"});
print(3);
print(3.14);
//print("Hello"); <- generate a compile error because of static_assert, this is not an acceptable type
return 0;
}
PS : par contre je sais pas si on peut surcharger l'opérateur * sur un primitif
- Edité par romantik 25 juin 2019 à 14:36:25
Dream on, Dream on, Dream until your dream comes true
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.