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