Je n'arrive pas à comprendre comment spécialiser partiellement ce modèle. compilateur se plaint que le paramètre de modèle N est pas utilisé dans la spécialisation partielleSpécialisation partielle du modèle C++
#include <boost/multi_array.hpp>
template<typename T, class A>
struct adaptable;
template<typename T, size_t N>
struct adaptable<T,
// line below is the problem
typename boost::multi_array<T,N>::template array_view<2>::type>
{
typedef typename boost::multi_array<T,N>::template array_view<2>::type type;
};
Je peux ajouter le paramètre de modèle factice juste pour faire taire le compilateur.
template<typename T, class A, class A0 = A>
struct adaptable;
template<typename T, size_t N>
struct adaptable<T,
typename boost::multi_array<T,N>::template array_view<2>::type,
boost::multi_array<T,N> >
{
typedef typename boost::multi_array<T,N>::template array_view<2>::type type;
};
est-il plus simple?
Je ne peux même pas dire ce que vous essayez d'accomplir avec votre spécialisation partielle. À quoi ressemble la version non spécialisée de 'struct adaptable'? – Omnifarious
@Onm Je mets une déclaration non spécialisée – Anycorn
Je ne suis pas certain, mais il pourrait y avoir des problèmes provenant du fait que dans le template de base pour 'adaptable', le 2ème paramètre de template est un type, alors que dans votre spécialisation, c'est une intégrale constant. Ma conjecture est que pour cette raison, la 2ème déclaration n'est pas réellement une spécialisation (partielle ou autre) du 1er, et devrait probablement être marquée par le compilateur comme une erreur. –