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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vendetta17
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 8
#1

Шаблонные классы. Присвоение к указателю и приведение типов - C++

27.07.2013, 19:48. Просмотров 611. Ответов 7
Метки нет (Все метки)

Добрый вечер, ув. форум, есть к вам вопрос.
Есть род. абстрактный класс: ParentAbstact
Есть два наследника: ChildOne : public ParentAbstact и ChildTwo : public ParentAbstact
Есть шаблонный класс: TempClass <T>
Есть глобальные экземпляры: extern TempClass<ChildOne> childOne и extern TempClass<ChildOne> childTwo

Это всё из приватного фреймворка, к сожалению, дополнительную информацию я предоставить не могу, прошу простить меня.

А теперь сам вопрос:
Я пытаюсь создать указатель на TempClass<T>.
C++
1
2
3
4
5
6
7
8
SomeClass::SomeFun()
{
    ...
    TempClass <ParentAbstact>* pointerToTemp = NULL;
    ... some checks
    pointerToTemp = &childOne; // ошибка: "error C2440: =: невозможно преобразовать 'TempClass<ChildOne> *' в 'TempClass<ParentAbstact> *' ..."
    ...
}
Можно ли сделать приведение типа в этом случаи?

Добавлено через 37 минут
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2013, 19:48     Шаблонные классы. Присвоение к указателю и приведение типов
Посмотрите здесь:
Приведение типов (классы) C++
Присвоение значения указателю C++
Присвоение по указателю на 32 и 64 битных машинах C++
C++ Шаблонные классы
C++ Шаблонные классы
C++ Шаблонные классы
C++ Шаблонные классы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
27.07.2013, 21:20     Шаблонные классы. Присвоение к указателю и приведение типов #2
Цитата Сообщение от vendetta17 Посмотреть сообщение
Можно ли сделать приведение типа в этом случаи?
можно, но не нужно)
vendetta17
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 8
28.07.2013, 01:16  [ТС]     Шаблонные классы. Присвоение к указателю и приведение типов #3
Цитата Сообщение от BigLow Посмотреть сообщение
можно, но не нужно)
а как?
Как сделать так, чтобы вот эта строка заработала?
C++
1
pointerToTemp = &childOne; // ошибка: "error C2440: =: невозможно преобразовать 'TempClass<ChildOne> *' в 'TempClass<ParentAbstact> *' ..."
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.07.2013, 01:55     Шаблонные классы. Присвоение к указателю и приведение типов #4
нужно менять ваш приватный фреймворк, который вы нам не показываете.
vendetta17
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 8
28.07.2013, 03:05  [ТС]     Шаблонные классы. Присвоение к указателю и приведение типов #5
Цитата Сообщение от DU Посмотреть сообщение
нужно менять ваш приватный фреймворк, который вы нам не показываете.
с чего это вдруг? Тут даже костылей нет, а связка классов на низком уровне.
Даже если так, не суть, не за критикой чужого кода я сюда пришел.
Ответа на моего вопроса не будет?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2013, 03:33     Шаблонные классы. Присвоение к указателю и приведение типов #6
Цитата Сообщение от vendetta17 Посмотреть сообщение
Можно ли сделать приведение типа в этом случаи?
приведение типа можно сделать всегда. что там окажется в результате это уже другой вопрос

Добавлено через 37 секунд
Цитата Сообщение от vendetta17 Посмотреть сообщение
с чего это вдруг? Тут даже костылей нет
ваш вопрос уже костыль
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.07.2013, 04:10     Шаблонные классы. Присвоение к указателю и приведение типов #7
Цитата Сообщение от vendetta17 Посмотреть сообщение
Можно ли сделать приведение типа в этом случаи?
Сделать можно:
C++
1
pointerToTemp = (TempClass <ParentAbstact>*)&childOne;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2013, 12:12     Шаблонные классы. Присвоение к указателю и приведение типов
Еще ссылки по теме:
C++ Присвоение адреса указателю, равному NULL
Присвоение указателю на char значения int C++
C++ Шаблонные классы и оптимизация
C++ Шаблонные функции и классы
C++ Шаблонные дружественные классы

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

Или воспользуйтесь поиском по форуму:
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.07.2013, 12:12     Шаблонные классы. Присвоение к указателю и приведение типов #8
это была не критика а факт.
типы SomeTeplate<Base> и SomeTemplate<Derived> - в общем случае ни как между собой не всязаны с точки зрения компилятора, как бы близко в иерархии между собой не находились Base и Derived. Чтобы можно было безопасно кастить - нужно смотреть на реализацию и менять ее под этот кастинг если там сейчас этого нет.
Если бы былоо так:
C++
1
2
3
4
5
6
7
8
9
template <class T>
class SomeTemplate : public T
{
};
или
template <class T>
class SomeTemplate : public SuperBase
{
};
, то проблем с кастом не возникло. А реинтерпрет касты или си стайл касты всегда можно заюзать, только не факт что из этого получится что-то хорошее.
Yandex
Объявления
28.07.2013, 12:12     Шаблонные классы. Присвоение к указателю и приведение типов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru