490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
1

Из адреса (строка, число) получить объект

23.07.2019, 20:40. Показов 1435. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем, вот, случилась ситуация, мне нужно методом переместить указатель на объект, но метод принимает только строку, можно ли как-то в эту строку положить адрес, и потом по нему же достучаться до объекта?

к примеру:

C++
1
2
3
4
void setAdress(std::string& s)
{
    private_adress = s;
}
и потом получить:
C++
1
2
3
4
std::string getAdress()
{
    return pricate_adress;
}
Параметром не могу т.к. код менять нельзя, наследоваться так же, единственный вариант получить из строки (либо числа, там уже распарсить могу)

P.S. Такое не подходит, нужно именно в строке держать

C++
1
2
3
4
5
Object* obj = new Object();
void* o = obj;
std::string *str = static_cast<std::string>(o);
void* o2 = str;
Object* obj2 = static_cast<Object*>(o2);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2019, 20:40
Ответы с готовыми решениями:

Получить маску, адреса подсетей, max число хостов
Есть задание &quot;Вводим класс сети и число подсетей, на которое её надо разбить, на выходе получаем...

Строка: Получить первое натуральное число i, для которого каждый из символов si и si+1 совпадает с буквой a.
Даны натуральное число n, символы s1, …, sn. Получить первое натуральное число i, для которого...

Получить двумерный массив 4 х 10, в котором каждая строка получена циклическим сдвигом исходного массива на заданное число позиций.
Задан одномерный массив размером 10, элементами которого являются целые числа от 10 до 1,...

Получить двумерный массив 4 х 10, в котором каждая строка получена циклическим сдвигом исходного массива на заданное число позиций
Доброе утро. Помогите с решением задачи) Очень хочу четверку по информатике =) Задан...

18
Заблокирован
23.07.2019, 21:19 2
Цитата Сообщение от kitsoRik Посмотреть сообщение
можно ли как-то в эту строку положить адрес, и потом по нему же достучаться до объекта?
Метод, принимающий строку предназначен для передачи именно строк, а не указателей на экземпляры классов.

Что за вундервафлю пишешь?
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
23.07.2019, 21:25  [ТС] 3
Цитата Сообщение от Verevkin Посмотреть сообщение
Метод, принимающий строку предназначен для передачи именно строк, а не указателей на экземпляры классов.
Возможно я плохо описал, этот метод просто хранит в себе строку, что бы в дальнейшем передать ей другому объекту, который о первом ничего не знает, получается так:
Object1 -> passText to TemporaryObject... -> TemporaryObject passText -> Object2
А мне хотелось бы передать именно объект.

Цитата Сообщение от Verevkin Посмотреть сообщение
Что за вундервафлю пишешь?
Как по мне, то получения данных из адресе было бы вполне нормально

Добавлено через 1 минуту
Verevkin, адрес, это я иммел в виду что бы в строке лежало типа этого "AU16BDDW", т.е. адрес в памяти
0
Заблокирован
23.07.2019, 21:42 4
Цитата Сообщение от kitsoRik Посмотреть сообщение
адрес, это я иммел в виду что бы в строке лежало типа этого "AU16BDDW", т.е. адрес в памяти
Цифра "U" - это что-то новое. Если ты хочешь преобразовать 32-битный адрес в строку, то так и пиши. А то развёл, блин, сантабарбару.
1
6089 / 3447 / 1402
Регистрация: 07.02.2019
Сообщений: 8,762
23.07.2019, 21:43 5
Лучший ответ Сообщение было отмечено kitsoRik как решение

Решение

Это конечно тот еще трэш, но можно адрес записать в строку, а потом прочитать в адрес
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
struct Obj
{
    double val{ 3.14 };
};
 
class Temp
{
    std::string m_str;
public:
    void sets(const std::string& str)
    {
        m_str = str;
    }
    std::string gets()const
    {
        return m_str;
    }
};
 
std::string pack(Obj* o)
{
    char str[sizeof(Obj*) + 1]{};
 
    std::memcpy(str, (char*)&o, sizeof(Obj*));
    return str;
}
 
Obj* unpack(const std::string& str)
{
    Obj* ret{};
    std::memcpy((char*)&ret, str.data(), sizeof(Obj*));
    return ret;
}
 
int main()
{
    Obj o;
 
    Temp tmp;
    tmp.sets(pack(&o));
    std::cout << unpack(tmp.gets())->val;
}
1
Заблокирован
23.07.2019, 21:47 6
Цитата Сообщение от zayats80888 Посмотреть сообщение
Это конечно тот еще трэш, но можно адрес записать в строку, а потом прочитать в адрес
Ну нахрена говнокодить-то? Это ж типичный xyz.
4
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
23.07.2019, 22:02  [ТС] 7
Цитата Сообщение от Verevkin Посмотреть сообщение
Цифра "U" - это что-то новое
вводил не думая, а W не смутило? Речь все таки была про оперативную память (хранится двоичной, выводится в 16-ричной)
0
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,259
Записей в блоге: 7
23.07.2019, 22:08 8
kitsoRik, не могу представить ситуации, где было бы нужно так извращаться.
Опишите подробнее зачем вам это?
1
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
23.07.2019, 22:50 9
Цитата Сообщение от kitsoRik Посмотреть сообщение
, этот метод просто хранит в себе строку, что бы в дальнейшем передать ей другому объекту
Возьми void * и не морочь голову со строками.

Добавлено через 1 минуту
Потому что данный тип как раз и предназначен для хранения и передачи адресов чего-либо в C и C++.

Добавлено через 1 минуту
Запоминать адреса в строках в любом случае бесполезно, т.к. при следующем запуске программы они будут совершенно иными. Особенно те что у переменных в куче.
1
Заблокирован
23.07.2019, 23:02 10
Цитата Сообщение от kitsoRik Посмотреть сообщение
вводил не думая, а W не смутило?
До "W" я не дочитал.
Цитата Сообщение от kitsoRik Посмотреть сообщение
Речь все таки была про оперативную память
Я догадался.
Цитата Сообщение от kitsoRik Посмотреть сообщение
хранится двоичной, выводится в 16-ричной
Раз ты такой продвинутый, то зачем пытаешься лечить кариес через анальное очко?
Зачем что-то преобразовывать для передачи, чтобы на приёме преобразовывать в первоначальный вид? Это же глупо и неэффективно.
1
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
24.07.2019, 08:02  [ТС] 11
Цитата Сообщение от Verevkin Посмотреть сообщение
Это же глупо и неэффективно.
Конечно, я понимаю, ниже опишу ситуацию.
Цитата Сообщение от Max Dark Посмотреть сообщение
Опишите подробнее зачем вам это?
Цитата Сообщение от TRam_ Посмотреть сообщение
Возьми void * и не морочь голову со строками.
Дело в том, что есть написанная библиотека, которую менять не нужно, она принимает текст от первого объекта, который в итоге через несколько минут будет передан другому объекту в этой же программе, но "другой" объект, ничего не знает о первом.

Вот, незнаю почему, но перегруженных методов там нет, сам не знаю почему не сделали, но есть что есть.

Добавлено через 35 секунд
Цитата Сообщение от TRam_ Посмотреть сообщение
при следующем запуске программы они будут совершенно иными
Мне нужно только в этой же сессии сделать это.
0
Заблокирован
24.07.2019, 08:29 12
Цитата Сообщение от kitsoRik Посмотреть сообщение
она принимает текст от первого объекта, который в итоге через несколько минут будет передан другому объекту в этой же программе, но "другой" объект, ничего не знает о первом.
Ну так передавай сразу в "другой" объект.
C++
1
2
3
4
5
char temp[128];
Object* obj = new Object();
 
sprintf(temp, "%08X", (uint32_t)obj);
string s = string(temp); // конструктор. я хз, так правильно? в С++ не шарю.
0
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,259
Записей в блоге: 7
24.07.2019, 08:34 13
kitsoRik, кто управляет созданием объектов и выбором от кого кому будет вестись передача?

Приведите пример в псевдокоде как это происходит.
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
24.07.2019, 09:01  [ТС] 14
Цитата Сообщение от Verevkin Посмотреть сообщение
Ну так передавай сразу в "другой" объект.
объекты друг друга не знают, данные передаются через общего друга который проходит от одного до второго несколько минут

Цитата Сообщение от Max Dark Посмотреть сообщение
Приведите пример в псевдокоде как это происходит.
2-я минута выполнения программы:
ВременныйОбъект->установитьУказательНаОбъект(Объект1)
...
7-я минута выполнения программы
Создаеться Объект2
Объект2->установитьУказательНаОбъект1(ВременныйОбъект->Объект)

Цитата Сообщение от Max Dark Посмотреть сообщение
кто управляет созданием объектов и выбором от кого кому будет вестись передача?
Созданиям объектом управляю я, выбор зависит от действия, в данном случае, есть выбор между сколькими окнами, в какое окно тыкнет, в том и появиться.

Я мог это решить просто статическим указателем "лишнего" класса, но тогда за один раз можно было бы установить только один объект.
0
Заблокирован
24.07.2019, 09:22 15
Цитата Сообщение от kitsoRik Посмотреть сообщение
объекты друг друга не знают, данные передаются через общего друга который проходит от одного до второго несколько минут
С меня хватит.

Кликните здесь для просмотра всего текста
0
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,259
Записей в блоге: 7
24.07.2019, 10:40 16
kitsoRik,
Что представляет из себя этот "ВременныйОбъект" и зачем нужен?
Что является идентификатором "окна"?
Как вы храните список "окон"?
Каким образом определяется выбранное "окно"?
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
24.07.2019, 11:23  [ТС] 17
Цитата Сообщение от Max Dark Посмотреть сообщение
Что представляет из себя этот "ВременныйОбъект" и зачем нужен?
Просто объект который может принимать и отдавать информацию, он хранится в связи между всеми окнами, что-то типа графа у которого все точки соеденены со всеми.

Цитата Сообщение от Max Dark Посмотреть сообщение
Что является идентификатором "окна"?
Некий класс, который хранит этот "ВременныйОбъект"

Цитата Сообщение от Max Dark Посмотреть сообщение
Как вы храните список "окон"?
Никак, есть самый верхний объект который руководит связями между окнами.

Цитата Сообщение от Max Dark Посмотреть сообщение
Каким образом определяется выбранное "окно"?
Самый верхний объект просто вызывает метод когда окно становиться активным
0
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,259
Записей в блоге: 7
24.07.2019, 12:10 18
kitsoRik, что то все слишком запутано...
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
24.07.2019, 13:07  [ТС] 19
Цитата Сообщение от Max Dark Посмотреть сообщение
что то все слишком запутано...
на деле все просто, это как писать дерево, есть писать число по тексту, то впервые сложновато, но если все визуально видно то становится проще
0
24.07.2019, 13:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2019, 13:07
Помогаю со студенческими работами здесь

Получить действительный матрицу А( n,m) Первая строка которого задана формулой C1j=2*j+3, вторая строка задается формулой С2j=2+1/j, а каждая следующая строка есть сумма предыдущих.
Получить действительный матрицу А( n,m) Первая строка которого задана формулой C1j=2*j+3, вторая...

Получить адреса с 3 по 10 элементов массива и получить значения на экране
Задан массив из 15 значений получить адреса с 3 по 10 элементы и получить значения на экране

Строка адреса
Приветствую всех! Вот есть php код поиск по бд, которыйвыводит данные в search.php, как сделать...

Пропала строка адреса
Извините что не в том разделе. У меня пропала строка адреса сайта в мозилле. ее просто нет. в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru