2012-05-03 3 views
3

Пусть шаблон класса А определяется следующим образом:Циклическая Шаблон

template <typename T> 
class A 
{ 
    B<T> b; 
}; 

Пусть шаблон класса B определяется следующим образом:

template <typename T> 
class B 
{ 
    A<T> a; 
}; 

В идеале, эти классы будут определены в отдельных заголовков с встраиваемыми реализаций , Однако это вызовет проблему циклического включения. Одним из решений является включение реализации шаблонных классов в файл cpp. Однако для этого потребуются специализированные экземпляры шаблонов.

Есть ли способ сохранить реализацию классов в строгом соответствии и избежать циклической зависимости включения? Я хотел бы избежать использования указателей, если это возможно.

Спасибо,

Сэм

+0

Вы не можете этого сделать, поскольку для этого потребуется бесконечное количество памяти. Здесь вы должны использовать указатели или ссылки. –

+0

@classdaknok_t да, я думаю, вы правы. Мне может понадобиться использовать указатели ... –

ответ

4

вперед объявлять классы и охранников использование заголовков (или нестандартную #pragma один раз). http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.11

Обратите внимание, что два класса не могут полностью содержать объект друг от друга. Это будет описывать объект бесконечного размера ...
http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.12

+0

Не переадресовал бы объявление класса, только если он держал указатель (или ссылку) на другой класс? – SirGuy

+0

Да, один из классов, по крайней мере, должен ссылаться на другой указатель или ссылку. В любом случае это было бы несерьезно, так как оно описывало бы бесконечно большой объект. http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.12 – log0

Смежные вопросы