Понимание шаблона C ++ - PullRequest
       24

Понимание шаблона C ++

2 голосов
/ 15 июля 2011

Я пытаюсь понять, что будет означать следующий код, поскольку он является допустимым кодом C ++:

template<class A>
class AT
{
    AT();
};

template<class B>
AT<B>::AT()
{}

Может кто-нибудь помочь мне понять, каков эффект создания шаблона в конструкторе?А также, если кто-то может прийти с полезным практическим примером использования, я был бы очень признателен.

Танки

Ответы [ 2 ]

4 голосов
/ 15 июля 2011

Здесь нет шаблона создания экземпляра.Последняя половина этого кода просто определяет конструктор для класса AT.Обратите внимание, что при выполнении этого обычно используется одинаковые имена для параметров шаблона:

template<class A>
class AT
{
    AT();
};

template<class A>
AT<A>::AT()
{}

Использование этого синтаксиса будет означать разрыв циклов зависимости:

template<class A>
class AT
{
    AT();
};

class Dependent
{
    AT<Dependant> member; // Complete definition of AT is needed here
};

template<class A>
AT<A>::AT()
{
    Dependent object; // Complete definition of Dependent is needed here
}
3 голосов
/ 15 июля 2011

Имя параметра шаблона не имеет значения. Если вы напишите вторую часть как

template<class A>
AT<A>::AT()
{ }

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

...