crossplatform.ru

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

> перекрестные указатели в шаблонах
mezmay
  опции профиля:
сообщение 19.7.2011, 11:11
Сообщение #1


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

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

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




Репутация:   1  


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


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

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

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




Репутация:   12  


Как-то так, например:
class TA {};
class TB {};

template<class T_classB> class classB;

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

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


Но там была бага со старыми студиями. Вроде 6-я студия это не сожрёт. А новые компилеры вроде все поддерживают.

Можно разделить на два хедера:
class TA;
class TB {};

template<class T_classA> class classA;

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


class TB;
class TA {};

template<class T_classB> class classB;

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


P.S. шаблоны лучше вообще запихивать в cpp файлы. у мелкософта были косяки с шаблонами в заголовочниках. я сейчас смутно помню, в чём они заключались, но суть была такая, что лучше их запихивать в cpp. и ещё у них есть проблемы с шаблонами в dll. там надо создавать пустые представители класса, иначе линкер выкинет шаблон из библиотеки. впрочем, может, последние студии стали более продвинуты в этом плане, я не проверяла.

Сообщение отредактировал Iron Bug - 19.7.2011, 20:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 28.1.2025, 9:13