Je travaille sur un template de classe Array, qui accepte un autre template TRAITS en paramètre. Je voulais spécialiser l'opérateur [] de Array basé sur les Traits :: Struct, mais je suis coincé avec la syntaxe. Je ne suis pas sûr que ce soit possible.C++ fonction de membre spécialisation d'une classe qui a un template en paramètre
template <typename B>
typename Array<Traits<B, RuntimeDefined>>::Struct&
Array<Traits<B, RuntimeDefined>>::operator[](size_t a_index)
{
// Access proper member differently
}
compilateur (g ++ 4.4) se plaint:
In file included from array.cpp:8:
array.h:346: error: invalid use of incomplete type ‘class Array<Traits<N, RuntimeDefined> >’
array.h:26: error: declaration of ‘class Array<Traits<N, isig::RuntimeDefined> >’
EDIT.
La solution est basée sur la proposition de aaa et il ressemble à ceci:
Struct& operator[](size_t i)
{
return OperatorAt(i, m_traits);
}
template <typename B, typename S>
inline Struct& OperatorAt(size_t i, const Traits<B, S>&)
{
// return element at i
}
template <typename B>
inline Struct& OperatorAt(size_t i, const Traits<B, RuntimeDefined>&)
{
// partial specialisation
// return element at in a different way
}
Merci beaucoup de fournir un point de vue différent sur la solution. – matejk