Если B
является подклассом A
, то вы все равно можете отсортировать список указателей на объекты типа B
, даже если тип массива - «массив указателей на A
».
1007 * Е.Г. *
A** ptrToBs = new A*[10];
ptrToBs[0] = &b01; // ... or new B
ptrToBs[1] = &b02;
// ...
ptrToBs[9] = &b10;
f(ptrToBs);
Однако то, что вы говорите , вы хотите - это общий алгоритм для обмена объектами, а не указатели, основанные на значении указанных объектов. В этом случае вам лучше иметь шаблон функции.
template< class T >
void f(T* t)
{
// ...
}
Таким образом, вы можете отсортировать массив A
или массив B
без необходимости иметь массив указателей на правильный тип; Вы можете просто отсортировать массив объектов A
или B
или что-либо еще, при условии, что тип сортируемых объектов поддерживает операции, которые вы используете в алгоритме сортировки.
Как правило, вы хотите передать размер массива или указатель в конец массива, чтобы алгоритм не предполагал, насколько велик массив.
template< class T > void f(T* arr, std::size_t size);
или
template< class T > void f(T* first, T* last);