Как избежать переопределения ошибки шаблона <class T> при включении заголовков - PullRequest
0 голосов
/ 30 апреля 2019

Я создал свой первый шаблонный класс, от которого происходят и класс A, и класс B.Теперь в Ch я включаю и Ah, и Bh

. Как объяснено здесь , вы можете использовать один и тот же шаблон только один раз на единицу перевода.Я понимаю это - но как я могу предотвратить ошибку выше?Поскольку A и B используют один и тот же шаблон в своих строках определения класса, они оба будут извлечены в один и тот же файл Ch.Я не понимаю, как я могу разделить это на несколько файлов.

Нужно ли включать include guard в шаблон .h файла?(Но тогда как второе использование шаблона узнает, что T в классе отличается?

1 Ответ

0 голосов
/ 30 апреля 2019

Означает ли это, что шаблон нужно включать только один раз, и каждый раз, когда он используется, компилятор заменяет T для этого конкретного использования?

Да, в этом весь смыслшаблон класса;вы просто определяете его один раз (плюс любые специализации), и компилятор генерирует отдельный класс для каждого отдельного создания шаблона.

Например, это:

template<class T>
class Foo {
};

позволяет затем писать Foo<int>, Foo<long>, Foo<std::string>, Foo<Foo<int> *> и т. Д. И т. Д., И компилятор сгенерирует необходимый класс для каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...