Страницы

Поиск по вопросам

четверг, 4 октября 2018 г.

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

Как вынести метод шаблонного класса из хэдера в 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; }
Очевидно, в данном примере это равносильно варианту, когда реализация метода расположена в заголовочном файле.
А вообще, если у Вас возникла такая задача, стоит задуматься, на верном ли Вы пути, так сказать :)

Комментариев нет:

Отправить комментарий