Вынести метод шаблонного класса в .cpp

1,00
р.
Как вынести метод шаблонного класса из хэдера в cpp ?


Ответ
Необходимо помнить, что шаблон порождает код класса только тогда, когда вы употребляете этот шаблон в программе с конкретными параметрами. Это означает, что нельзя скомпилировать модуль содержащий просто шаблон класса. Шаблон — это еще не тип (в C#, напротив, угловые скобки говорят о типе Generic). Таким образом, реализация метода должна быть в том модуле, где этот метод используется, иначе получите Unresolved symbol. Вот пример, который скомпилировался в MSVS 2008:
foo.h:
#pragma once
template class Foo { public: T bar(T a) const }
main.cpp
#include "foo.h"
template T Foo::bar(T a) const { return a }
int main(int argc, char *argv[]) { Foo a int b = a.bar(3) return 0 }
Очевидно, в данном примере это равносильно варианту, когда реализация метода расположена в заголовочном файле.
А вообще, если у Вас возникла такая задача, стоит задуматься, на верном ли Вы пути, так сказать :)