ли так нельзя делать по стандарту, то ли я что-то не так готовлю. В общем есть foo.h, где в пространстве имен my задекларирован класс Foo со статическим шаблонным методом template<typename T> static void do(T);. И есть foo.cpp с имплементацией этого метода. Линковщик не может слинковать такое с ошибкой undefined reference. Так по стандарту нельзя делать?
Если вы спрятали реализацию шаблона в .cpp файл, то вам нужно в нём организовать инстанциацию шаблона от всех поддерживаемых типов.
тогда смысл иметь шаблон пропадает. Пришлось всё закинуть в .h в итоге
Если набор ограничен, то смысл есть, чтобы ускорить компиляцию. У меня в проекте очень много шаблонов, параметризуемых либо bool, либо всего двумя разными типами, и мы вовсю уносим реализации в .cpp.
омг, там количество реализаций будет расти в геометрической сложности. Как это потом поддерживать
А какая изначальная задача, почему будет расти в геометрической сложности?
ну вот допустим надо сделать три статических метода каждый с двумя одинаковыми шаблонными параметрами (например методы вызывают друг друга). Получается 2*3=6 реализаций надо будет сделать в cpp файле
А это реальный кейс или может быть? Ты так и планируешь использовать эти методы?
у меня реальный кейс: 1 параметр шаблона (может принимать 3 разных значения) и методов 5, которые вызывают друг друга - 15 реализаций
Обсуждают сегодня