Определение шаблона вне класса в DLL (ошибка: определение функции dllimport недопустимо) - PullRequest
0 голосов
/ 26 апреля 2020

Я получаю следующую ошибку компилятора: Ошибка компилятора «идентификатор» C2491: определение функции dllimport не разрешено

Нижеследующий код не работает только потому, что определение шаблона находится вне класса, если я помещу определение в класс, компиляция будет в порядке.

Чего я хочу добиться, так это иметь определение вне класса, возможно ли это?

Вот заголовок и исходный файл внутри проекта DLL (определяет COMPILE_DLL __declspe c (dllexport)):

DLLHeader.h

#pragma once

// DLL export/import symbols
#ifdef COMPILE_DLL
#define DLL_API __declspec(dllexport)
#elif defined (LINK_DLL)
#define DLL_API __declspec(dllimport)
#endif

template<typename T>
class DLL_API FromDLL
{
public:
    ~FromDLL();
};

// error C2491: 'FromDLL<T>::~FromDLL': definition of dllimport function not allowed
// no error if definition put inside class
template<typename T>
FromDLL<T>::~FromDLL()
{
}

DLLSource. cpp

#include "DLLHeader.h"

// Explicit intantation for DLL export
template class DLL_API FromDLL<int>;

А вот код клиента, который использовал DLL (определяет LINK_DLL __declspe c (dllimport))

Клиент. cpp

#define LINK_DLL
#include "DLLHeader.h"


int main()
{
    FromDLL<int> instance;

    // EDI: I also want to reuse template code
    FromDLL<float> instance;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...