ситуация такова :
есть класс:
class BaseSort
{
public:
BaseSort(unsigned char *pB,unsigned char *pE);
unsigned char *pEnd;
unsigned char *pBegin;
unsigned char bs[MAX_SYMBOLS];
BaseSort();
unsigned char* operator[](long i);
void operator=(unsigned char* c);
virtual ~BaseSort();
};
где :
unsigned char* BaseSort::operator [](long i)
{
return pBegin+i*MAX_SYMBOLS;
}
есть шаблон функции :
template<class T>
void quickSortR(T* a, long N) {
// На входе - массив a[], a[N] - его последний элемент.
long i = 0, j = N; // поставить указатели на исходные места
T temp, p;
p = a[ N>>1 ]; // центральный элемент
// процедура разделения
do {
while ( a < p ) i++;
while ( a[j] > p ) j--;
if (i <= j) {
temp = a; a = a[j]; a[j] = temp;
i++; j--;
}
} while ( i<=j );
// рекурсивные вызовы, если есть, что сортировать
if ( j > 0 ) quickSortR(a, j);
if ( N > i ) quickSortR(a+i, N-i);
}
при вызове:
unsigned char pFile;
long FileSize;
....
BaseSort tt(pFile,pFile+FileSize);
quickSortR(&tt,FileSize);
вместо моего operator[] " return (unsigned char*) pBegin+N/2*MAX_SYMBOLS " вызывается нечто вроде : " return (BaseSort&) &tt+i*sizeof(tt) "- я так думаю это operator[] по умолчанию
и как следсвие того, что op[] возврашщяет BaseSort& вызывается уже не operator=(unsigned char*) , а operator=(BaseSort&);
Как мне вставить свой operator[] в класс ?
Или придется переписывать все шаблоны ?