Нужно написать функцию сравнения объектов по адресам. При чём, принимать она должна уметь разные типы. То есть, нельзя её сделать с помощью указателей. Есть ли в C++ тип данных (не указатель) , в переменной которого можно хранить адрес объекта.
Что-то типа:
<тип> i = &obj; //obj - любой тип данных
Другие языки программирования и технологии
С++. Сравнение объектов
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, сам по себе он не указатель, а макрос.
Может хранить адрес переменной любого типа. Сам 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, сам по себе он не указатель, а макрос.
Вы вообще о чём?
C++ имеет такое понятие, как шаблоны.
Шаблон функции выглядит примерно так: Шаблоны C++
Если не парится с реализацией шаблонов, то это выглядит так, как вы хотели: функции можно скармливать объекты разных типов, которые умеют сравниваться с помощью оператора сравнения (например > или <).
Сравниваются все типы, которые имеют указанный оператор. Надо добавить свой тип - определите в вашем классе этот оператор и всё заработает.
void * - указатель, лишённый информации о типе, в том числе и информации, как сравнивать, а также того, можно сравнивать вообще (например строки и enum). И это именно указатель, а не специальный тип данных.
C++ имеет такое понятие, как шаблоны.
Шаблон функции выглядит примерно так: Шаблоны C++
Если не парится с реализацией шаблонов, то это выглядит так, как вы хотели: функции можно скармливать объекты разных типов, которые умеют сравниваться с помощью оператора сравнения (например > или <).
Сравниваются все типы, которые имеют указанный оператор. Надо добавить свой тип - определите в вашем классе этот оператор и всё заработает.
void * - указатель, лишённый информации о типе, в том числе и информации, как сравнивать, а также того, можно сравнивать вообще (например строки и enum). И это именно указатель, а не специальный тип данных.
Похожие вопросы
- Агрегация объектов. С++
- Экземпляра класса, объекты
- рисующие цифровые картины, подскажите как экспортируете объекты из Corel в Photoshop?
- Покраска 3д объекта в bleder или photoshop
- Delphi:Прочитал, что если при динамическом создании компонента если указать Name объекта, то в последующем можно ->
- Что такое объект в программировании?
- СРОЧНО !!!ВЫРУЧАЙТЕ !!!Как в Photoshop уменьшить размер фото , СОХРАНИВ ПРИ ЭТОМ ПРОПОРЦИИ ОБЪЕКТА НА ФОТО!!!
- JS-программеры! подскажите пожалуйста код для перемещения объекта курсором мыши.
- ООП в PHP (взаимодействие между объектами)
- программно создать объект в C#