• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы 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
более развернуто
 
Мы в соцсетях:

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