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

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

Восстановить пароль Регистрация
 
vendetta17
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 8
27.07.2013, 19:48     Шаблонные классы. Присвоение к указателю и приведение типов #1
Добрый вечер, ув. форум, есть к вам вопрос.
Есть род. абстрактный класс: 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++ Присвоение значения фунции fopen указателю на файл
C++ std::list присвоение указателю на структуру итератора
C++ Шаблонные классы
C++ присвоение адреса указателю равному NULL
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
1477 / 1053 / 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
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.07.2013, 03:33     Шаблонные классы. Присвоение к указателю и приведение типов #6
Цитата Сообщение от vendetta17 Посмотреть сообщение
Можно ли сделать приведение типа в этом случаи?
приведение типа можно сделать всегда. что там окажется в результате это уже другой вопрос

Добавлено через 37 секунд
Цитата Сообщение от vendetta17 Посмотреть сообщение
с чего это вдруг? Тут даже костылей нет
ваш вопрос уже костыль
alsav22
5282 / 4801 / 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++
Приведение типов (классы) C++
C++ Шаблонные классы

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

Или воспользуйтесь поиском по форуму:
DU
1477 / 1053 / 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     Шаблонные классы. Присвоение к указателю и приведение типов
Ответ Создать тему
Опции темы

Текущее время: 00:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru