Идет ли явная реализация шаблона в cpp или заголовочный файл? - PullRequest
16 голосов
/ 03 мая 2011

Идет ли явная реализация шаблона в файле cpp или header?

Ответы [ 3 ]

18 голосов
/ 03 мая 2011

Предполагая, что под "явной реализацией шаблона" вы подразумеваете что-то вроде

template class Foo<int>; // explicit type instantiation
// or
template void Foo<int>(); // explicit function instantiation

, тогда эти должны помещаются в исходные файлы, поскольку они считаются определениями, и, следовательно, подчиняются ODR.

10 голосов
/ 03 мая 2011

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

0 голосов
/ 03 мая 2011

Либо один.

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

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