У меня есть библиотека, где у меня есть класс шаблона, который принимает тип структуры в качестве аргумента шаблона и выполняет некоторые операции, такие как save (dump in file), open (открыть файл для сохранения данных структуры) и т.д.реструктурировать классы для экспорта класса из dll
template<class T>
class MyDataSaver{};
поэтому пользователи библиотеки создают свои структур с любыми членами, которые они хотят, а затем писать размер, сериализовать как простые функции в структурах, которые шаблонный класс использует и делают операции. создание нового экземпляра шаблона класса
struct StructType
{
int i;
char ch;
int size() { return sizeof(i) + sizeof(ch);}
template<class Archive>
void serialize(Archive ar){ar & i & ch;}
};
MyDataSaver<StructType> myData;
// And then
myData.save()
// and
myData.open().
Теперь мой вопрос, я хочу, чтобы преобразовать библиотеку в DLL. Как я могу реструктурировать этот код или создать новый класс, который может позволить пользователям библиотеки использовать DLL вместо библиотеки с минимальным изменением кода в конце библиотеки?
Одним из грубых подходов, о которых я могу думать, является создание нового класса шаблонов и наличие в нем байтового массива и его экспорт, а некоторые - способ хранения типа структуры через этот новый класс.
Мне нужна динамически связанная dll (а не те библиотеки DLL, которые ссылаются на приложения с использованием файлов lib), которое приложение может загружать. Поэтому, если я вношу изменения в dll, например, сменил носители данных, или использовал функции crt-файла, а не специфичные для ОС, приложение, использующее dll, все равно сможет загружать и использовать его, как будто ничего не изменилось. Таким образом, все изменения, кроме изменения интерфейса, не должны влиять на приложение.