Форум программистов, компьютерный форум, киберфорум
Наши страницы

Как сделать *_cast указателя shared_ptr<T>? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что такое потоки ввода, потоки вывода? http://www.cyberforum.ru/cpp-beginners/thread1591358.html
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим есть код: std::cout << "Введите первое число: "; std::cin >> a;...
C++ Дано натурально число n. Сколько цифр в этом числе. Чему равняется сумма цифр. Найти первую цифру Желательно в С http://www.cyberforum.ru/cpp-beginners/thread1591348.html
C++ Преобразования Фурье прямое и обратное из библиотеки OpenCV
столкнулся с такой проблемой, необходимо использовать преобразования фурье прямое и обратное из библиотеки opencv, собственно имеется код: Mat sr_int_l= Mat_<std::complex<double>>(1,N),sr_int_r=...
C++ Массивы char. В чем ошибка?
Доброго времени суток! Возникла ошибка в этом коде. Имеется массив слов, пробую заполнить этот массив. #define _CRT_SECURE_NO_WARNINGS//Позволяет использоваться методу strcpy #include <string>...
C++ Реализовать функцию изменения количества битов на отсчет для Wav файла http://www.cyberforum.ru/cpp-beginners/thread1591267.html
необходимо реализовать функцию изменения количества битов на отсчет. Если я к примеру увеличиваю bitpersample с 16 до 32. Я увеличиваю нужные переменные в заголовке в 2 раза. и по идеи должен...
C++ Написать класс для авторизации Необходимо написать авторизацию в консоли, уже второй вечер так ничего и не приходит на ум... Есть класс users, содержащий поля для логина и пароля. Ниже приведен код записи объекта в бинарный файл.... подробнее

Показать сообщение отдельно
Operok
163 / 161 / 44
Регистрация: 15.02.2015
Сообщений: 472
Завершенные тесты: 2
25.11.2015, 15:11
Дело в том что шаблонные классы с разным шаблонным параметром это по сути разные классы, друг о друге ничего не знающие, даже для доступа к приватным данным их нужно "друзьями" объявлять. Чтобы динамически определять класс (тип) указателя, нужно наследование и RTTI, и использовать dynamic_cast или, если для shared_ptr, std::dynamic_pointer_cast, как подсказали выше. Если вы в shared_ptr храните указатель на объект только вам известного типа вместе с "делитером", то для приведения к соответствующему виду можно использовать std::static_pointer_cast.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct SomeData
{
...
}
struct MainData : SomeData
{
...
}
struct OtherData : SomeData
{
...
}
 
std::shared_ptr<SomeData> dataPtr[2];
...
dataPtr[0].reset(new MainData(), std::default_delete<MainData>());
dataPtr[1].reset(new OtherData(), std::default_delete<OtheData>());
...
MainData* mData = std::static_pointer_cast<SomeData, MainData>(dataPtr[0])->get();
OtherData* oData = std::static_pointer_cast<SomeData, OtherData>(dataPtr[1])->get();
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru