Problème de spécialisation partielle
Bonjour,
je n'arrive pas à spécialiser l'une de mes fonctions membres dans ma classe Vector. Je dispose de deux structures pour spécifier le format dense ou creux d'un Vector :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| template<typename precision> struct dense
{
size_t len_;
precision* val_;
};
template<typename precision> struct sparse
{
size_t len_;
size_t nnz_;
size_t *ind_;
precision* nzval_;
}; |
La classe Vector proprement dite ressemble à ceci (sans les méthodes) :
Code:
1 2 3 4 5
| template<template<typename T>class format,typename precision>class Vector : format<precision>
{
public:
precision const sum()const;
}; |
Le problème vient de la fonction sum() qui est censée me retourner la somme des éléments d'un Vector. Elle n'est pas implémentée de la même manière selon que le format est dense ou creux, donc j'ai tenté une spécialisation partielle pour le format creux :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| template<template<typename T>class format,typename precision> precision const Vector<format,precision>::sum()const
{
precision output = 0;
for (size_t i=0;i<len_;++i)
output += val_[i];
return output;
}
template<typename precision> precision const Vector<sparse,precision>::sum()const
{
precision output = 0;
for (size_t i=0;i<nnz_;++i)
output += nzval_[i];
return output;
} |
Malheureusement, ça ne compile pas parce que la spécialisation n'est pas reconnue en tant que telle. Quelqu'un saurait-il pourquoi?
Merci pour votre aide.