crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

mezmay
  опции профиля:
сообщение 19.7.2011, 11:11
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

Спасибо сказали: 16 раз(а)




Репутация:   1  


Есть 2 шаблона классов. Как сделать так чтобы они оба содержали указатели друг на друга и работали с этими указателями? В случае когда каждый шаблон полностью описан в заголовочном файла это сделать я так понял невозможно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 20.7.2011, 18:20
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


про эту штуку я давно в курсе (только не знал, как называется). Вопрос о другом. Ведь шаблонный класс компилятор рассматривает как полноправный класс, то есть classB<int> - это полноценный тип. А тут вот что:

class TA {};
class TB {};

template<class T_classB> class classB;

template<class T_classA> class classA
{
    public:
    classB<TB> *ptrB;
};

template<class T_classB> class classB
{
    public:
    classA<TA> *ptrA;
};

classA<int> a;
classB<char> b;

a.ptrB=&b;// указатель имеет тип classB<TB>* , а присваивается classB<char>*
b.ptrA=&a;// указатель имеет тип classA<TA>* , а присваивается classA<int>*


и я не понимаю, как так компилятор позволит сделать. В общем то, компилятор ругается таким загадочным образом:

Цитата
error C2440: =: невозможно преобразовать 'classB<T_classB> *' в 'classB<T_classB> *'
error C2440: =: невозможно преобразовать 'classA<T_classA> *' в 'classA<T_classA> *'


хотя я ожидал другое ))) Навроде

error C2440: =: невозможно преобразовать 'classB<char> *' в 'classB<TB> *'
error C2440: =: невозможно преобразовать 'classA<int> *' в 'classA<TA> *'

всё, у меня крыша едет ))

Кстати, раз уж такая пьянка, давно меня интересует вопрос, почему нельзя было сделать в C/C++ проверку времени компиляции навроде:

#if(typeof(...) == int)
#else
#endif


по моему, это очень просто и иногда требуется. Почему такого не сделали ?



Сообщение отредактировал Алексей1153 - 20.7.2011, 18:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 27.6.2025, 6:23