Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что такое потоки ввода, потоки вывода? http://www.cyberforum.ru/cpp-beginners/thread1591358.html
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим есть код: std::cout << "Введите первое число: "; std::cin >> a; std::cout << "Введите знак: "; std::cin >> sign; std::cout << "Введите второе число: ";
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= Mat_<std::complex<double>>(1, N); for (int i = 0; i < N; i++) { /// тут происходит заполнение этих двух массивов } Mat fft_l= Mat_<std::complex<double>>(1, N), fft_r=...
C++ Массивы char. В чем ошибка?
Доброго времени суток! Возникла ошибка в этом коде. Имеется массив слов, пробую заполнить этот массив. #define _CRT_SECURE_NO_WARNINGS//Позволяет использоваться методу strcpy #include <string> #include <stdlib.h> #include <iostream> using namespace std; void Output(string str) {
C++ Реализовать функцию изменения количества битов на отсчет для Wav файла http://www.cyberforum.ru/cpp-beginners/thread1591267.html
необходимо реализовать функцию изменения количества битов на отсчет. Если я к примеру увеличиваю bitpersample с 16 до 32. Я увеличиваю нужные переменные в заголовке в 2 раза. и по идеи должен данные каждого канала записать с 2мя нулевым байтами впереди. Если я прав, то в каком порядке мне записывать байты? а битрейт изменять надо?
C++ Написать класс для авторизации Необходимо написать авторизацию в консоли, уже второй вечер так ничего и не приходит на ум... Есть класс users, содержащий поля для логина и пароля. Ниже приведен код записи объекта в бинарный файл. Не могу понять, как правильно записывать данные: целиком объект класса или лучше по отдельности логин и пароль, чтобы потом удобнее было сверять с введенными? При последующем вводе логина и пароля... подробнее

Показать сообщение отдельно
Operok
132 / 130 / 36
Регистрация: 15.02.2015
Сообщений: 406
Завершенные тесты: 2
25.11.2015, 15:11     Как сделать *_cast указателя shared_ptr<T>?
Дело в том что шаблонные классы с разным шаблонным параметром это по сути разные классы, друг о друге ничего не знающие, даже для доступа к приватным данным их нужно "друзьями" объявлять. Чтобы динамически определять класс (тип) указателя, нужно наследование и 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();
 
Текущее время: 04:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru