J'ai une fonction de modèle qui fait quelque chose avec une valeur donnée tant que le type de modèle est un numéro:surcharge de fonction de modèle (type générique vs type de modèle de modèle) choisir de surcharge correcte
template <typename scalar_t>
void function(scalar_t value)
{
if constexpr (std::is_floating_point_v<scalar_t>)
{
std::cout << value << 'F';
}
if constexpr (std::is_integral_v<scalar_t>)
{
std::cout << value;
}
}
Et une surcharge pour ce modèle attend un conteneur contenant des nombres:
template <typename scalar_t, template <typename> class container_t>
void function(const container_t<scalar_t> &container)
{
for (const auto &value : container)
{
function(value);
std::cout << ' ';
}
}
Avec les modèles ci-dessus, j'appelle le code suivant:
int main()
{
function('0');
function(short{1});
function(2);
function(3l);
function(4ll);
function(5.f);
function(6.);
std::vector<int> v{7, 8, 9, 10};
std::list<double> l{11., 12., 13., 14.};
function(v);
function(l);
return 0;
}
Ce qui donne le résultat suivant:
F6F
Pendant que je me attendais à la sortie suivante:
F6F7 8 9 10 11F 12F 13F 14F
Ce qui signifie que la première version du modèle (function(scalar_t value)
) a été choisi au lieu de la deuxième version (function(const container_t<scalar_t> &container)
).
Comment puis-je forcer la sélection de la deuxième version de la fonction de modèle pour les paramètres de modèle de modèle?
ne sais pas si c'est le problème, mais les deux '' vECTOR' et list' n'avez pas un, mais deux paramètres du modèle – user463035818
@ tobi303 [ C'était le problème en effet] (https://wandbox.org/permlink/kvKHSpDJ6VEOWhRO) si vous pouvez expliquer pourquoi dans une réponse, je peux l'incriminer :) –