• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Как из определения класса вынести реализацию шаблонной функции

  • Автор темы Monarh
  • Дата начала
M

Monarh

Здравствуйте.
Подскажите пожалуйста как из определения класса вынести реализацию шаблонной функции ?
То есть, чтобы в "h-файле" было определения класса внутри которого присутствует только объявление шаблонной функции, а
реализация этой шаблонной функции находится в "cpp-файле".
На примере:
Есть класс Cls_A с общедоступной шаблонной функцией Func() в файле "A.h"
Код:
class Cls_A
{
public:
template<class T>
void Func( T*& , const string& , const string& )
{
...
}
};
Как сделать так, чтобы в файле "A.h" в определении класса осталось только объявление шаблонной функции:
Код:
class Cls_A
{
public:
template<class T>
void Func( T*& , const string& , const string& );
};
А в файле "A.cpp" была реализация этой шаблонной функции:
Код:
export template<class T>
void Func( T*& , const string& , const string& )
{
...
}
Страуструп на эту тему пишет:
"Для того, чтобы к нему(то есть, как я понимаю, к шаблону данной функции) можно было обратиться из различных единиц компиляции,
определение шаблона должно быть явно объявлено с export. Это можно сделать, добавив export к определению или
предварив им объявление. В противном случае определение должно находиться в области видимости в момент использования шаблона."

Но, компилятор на это пишет:
При копмиляции:
Код:
warning: keyword `export' not implemented, and will be ignored

При попытке запуска программы на выполнение:
Код:
build/Debug/Cygwin-Windows/Source/Main.o: In function `main':
/cygdrive/p/Quadrangle_Area_with_Curve_Boundary/Source/Main.cpp:50: undefined reference to `void Cls_Memory::Allocation<int>(int*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/cygdrive/p/Quadrangle_Area_with_Curve_Boundary/Source/Main.cpp:52: undefined reference to `void Cls_Memory::Allocation<double>(double*&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
...

Заранее всем большой спасибо.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
более развернуто
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!