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 :
La classe Vector proprement dite ressemble à ceci (sans les méthodes) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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_; };
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template<template<typename T>class format,typename precision>class Vector : format<precision> { public: precision const sum()const; };
Malheureusement, ça ne compile pas parce que la spécialisation n'est pas reconnue en tant que telle. Quelqu'un saurait-il pourquoi?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Merci pour votre aide.
Partager