Андрей
Андрей

С++. Сравнение объектов

Нужно написать функцию сравнения объектов по адресам. При чём, принимать она должна уметь разные типы. То есть, нельзя её сделать с помощью указателей. Есть ли в C++ тип данных (не указатель) , в переменной которого можно хранить адрес объекта.
Что-то типа:

<тип> i = &obj; //obj - любой тип данных

DS
Dj Suhanov Breack

void *Addr = &SomePerem;

Может хранить адрес переменной любого типа. Сам int занимает 4 байта, char 1 байт. Поэтому придется делать функцию, в аргументах которой будешь передавать адрес двух объектов и указывать их размер, что-то вроде такого:

bool compare(void *First, void *Second, int size, int ssize)
{
if (size != ssize) return false;
for (int i = 0; i < size; i++)
if (*First[i] != *Second[i]) return false;
return true;
}

Вызов:

compare(MasOne, MasSec, sizeof(MasOne), sizeof(MasSec));

Сравнение двух массивов, или так:

compare(strucone, strucsec, sizeof(STRUCTYPE), sizeof(STRUCTYPE));

^Сравнение двух структур.

Или сравнение переменных:

compare(a, b, sizeof(int), sizeof(int));

Где переменные a и b типа int.

Могут быть ошибки при компиляции, компиль может запретить такое наглое сравнение, в таком случае придется извиваться и извращаться с указателями. Или написать функцию на ассемблере.

P.S. Можешь еще глянуть тип LPVOID, сам по себе он не указатель, а макрос.

El
Elgo

Вы вообще о чём?

C++ имеет такое понятие, как шаблоны.
Шаблон функции выглядит примерно так: Шаблоны C++

Если не парится с реализацией шаблонов, то это выглядит так, как вы хотели: функции можно скармливать объекты разных типов, которые умеют сравниваться с помощью оператора сравнения (например > или <).
Сравниваются все типы, которые имеют указанный оператор. Надо добавить свой тип - определите в вашем классе этот оператор и всё заработает.

void * - указатель, лишённый информации о типе, в том числе и информации, как сравнивать, а также того, можно сравнивать вообще (например строки и enum). И это именно указатель, а не специальный тип данных.

Похожие вопросы
С++. Сравнения и перестановки
3ds max Разъединение одного большого объекта на несколько объектов
Сравнение hex'а 2ух или более файлов
php сравнение пееменных
сравнение чисел одной формулой без использования операций сравнения
[C#] Работа с переменными: (Сравнение)
Сравнение товаров для ucoz?
Язык С++. Объекты и их атрибуты. Объекты и их атрибуты
Как в illustrator разделить один объект на два объекта?
Как из объект куб сделать объект полигон в Cinema 4D?