C ++ создает экземпляр шаблона класса из DLL

Я попытался сделать DLL, которая содержит:

базовый шаблон класса, только с виртуальным деструктором и без атрибутов (Я назвал это MatrixInterface)

производный класс с конструкторами, деструктором, operator = и атрибутами (матричный класс)

функция, которая возвращает указатель базового класса на новый производный объект:

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif

template
MatrixInterface DLL_EXPORT * CreateMatrixInstance(unsigned int n,unsigned int m)
{
    return new matrix(n,m);
}

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

#include 
#include 
using namespace std;

template
class MatrixInterface
{
public:
    virtual ~MatrixInterface(void);
};


typedef MatrixInterface* (*Fptr)(unsigned int,unsigned int);

int main(int argc, char* argv[])
{
    Fptr p;
    MatrixInterface *x;
    char path[]="basicmatrix.dll";
    HINSTANCE hDll = LoadLibrary(path);
    cout