Witam !
Sprawa wygląda tak:
Mam szablon klasy wektor (w sensie matematycznym) dowolnego wymiaru i typu i jest fajnie.
Cala jego implementacja opiera się na rekurencyjnym wywoływaniu funkcji inline z innego szablonu klasy i też jest fajnie. Natomiast problem polega na tym, że funkcje wcale nie są rozwijane tylko normalnie wywoływane (dosłownie wszystkie) za pomocą call [???] . Taki stan rzeczy całkowicie eliminuje sens stosowania (poza tym) szablonów wyrażeń. Chodzi tu w całości o względy szybkości działania tych funkcji. Po przeszukania dok i innych takich na temat kompilatora nic na ten temat nie znalazłem. Część kodu wygląda mniej więcej tak:
PS: Całość była kompilowana w Microsoft Visual C++ 6.0
template<class VEC_T, class VEC_TT, int VEC_DIM> struct vector_impl{
template<int COUNT> struct setv{
static inline run(VEC_T& vec, const VEC_TT& val){
vec[COUNT] = val;
setv<COUNT-1>::run(vec, val);
}
};
template<> struct setv<-1>{
static inline run(VEC_T& vec, const VEC_TT& val){}
};
};
template<class T, int DIM> class vector{
T m[DIM];
typedef vector_impl<vector<T, DIM>, T, DIM> impl;
public:
T& operator[](int lp){
return m[lp];
}
const T& operator[](int lp) const{
return m[lp];
}
void setv(const T& val){
impl::setv<DIM-1>::run(*this, val);
}
};
Za wszelkie uwagi i pomoc z góry dziękuje !</url>