Obwohl coppro bereits zwei Lösungen erwähnt hat und Anonymous die zweite, hatte ich einige Zeit gebraucht, um die erste zu verstehen. Vielleicht ist der folgende Code hilfreich für jemanden, der über diese Seite stolpert, die wie Google in Google immer noch einen hohen Stellenwert hat. Das Beispiel (ein Vektor/Array/einzelnes Element von numericT als dataT übergeben und dann über [] oder direkt darauf zugrei- fen) ist natürlich etwas erfunden, sollte aber zeigen, wie man tatsächlich einer Teilfunktion durch das Wrapping sehr nahe kommen kann in einer teilweise spezialisierten Klasse.
/* The following circumvents the impossible partial specialization of
a member function
actualClass<dataT,numericalT,1>::access
as well as the non-nonsensical full specialisation of the possibly
very big actualClass. */
//helper:
template <typename dataT, typename numericalT, unsigned int dataDim>
class specialised{
public:
numericalT& access(dataT& x, const unsigned int index){return x[index];}
};
//partial specialisation:
template <typename dataT, typename numericalT>
class specialised<dataT,numericalT,1>{
public:
numericalT& access(dataT& x, const unsigned int index){return x;}
};
//your actual class:
template <typename dataT, typename numericalT, unsigned int dataDim>
class actualClass{
private:
dataT x;
specialised<dataT,numericalT,dataDim> accessor;
public:
//... for(int i=0;i<dataDim;++i) ...accessor.access(x,i) ...
};