Spécialisation de classes et valeurs de retour
Bonjour,
j'ai un petit souci avec certaines fonctions membres d'une classe spécialisée. J'ai défini une classe Vector pour manipuler des vecteurs :
Code:
1 2
| template<template<typename T>class storage,typename precision> Vector : storage<precision>
{}; |
Cette fonction admet pour paramètre une structure "storage" précisant le format de stockage de ses coefficients et une "precision" (int, float, double, ...). Pour le stockage, j'ai par exemple une structure dense :
Code:
1 2 3 4 5
| template<typename precision> struct dense
{
size_t size_;
precision* val_;
}; |
En fonction du format de stockage, je n'ai pas exactement les mêmes fonctions membres pour la classe Vector et je procède par spécialisation pour contourner ce problème. Dans le cas dense, j'ai :
Code:
1 2 3 4 5 6 7 8
| template<typename precision> class Vector<dense,precision> : dense<precision>
{
public:
Vector(Vector<dense,precision> const&);
public:
precision const sum() const;
Vector<dense,precision> abs() const;
}; |
Dans cet exemple, le constructeur par copie et la fonction sum compilent bien mais pas la fonction abs. Le compilateur me jette en me disant qu'il a un problème avec la structure dense qui n'est pas conforme avec la façon dont est défini le paramètre storage dans la déclaration générale de Vector (la toute première). Seulement, je ne comprends pas pourquoi et je n'arrive pas à corriger le problème.
Est-ce que quelqu'un aurait une idée?
Merci pour votre aide.