В моем приложении я использую библиотеку libxl для чтения файлов xls [x]. Данные взяты из файлов и выведены в таблицу QTableWidget.
Но теперь мне нужно добавить поддержку чтения файлов CSV. Как я могу сделать это совместимым с текущим кодом (с помощью методов libxl load (), getSheet () и т. Д.) (Libxl не поддерживает CSV).
Book* book;
if (excelfileName.endsWith(".xlsx")) {
book = xlCreateXMLBook();
} else if (excelfileName.endsWith(".xls")) {
book = xlCreateBook();
} else {
book = new CSVBook();
}
book->load(excelfileName.toLocal8Bit().data());
Какой шаблон дизайна я должен использовать для этого?
Для этого я создал новый класс csvbook
template<class TCHAR>
class csvbook: public libxl::IBookT<char>
{
<...>
}
и переопределить все виртуальные методы от IBookT.
На следующем шаге я написал тело для всех методов csvbook в том же файле с декларацией.
Объект создан в функции
template<class TCHAR>
csvbook<TCHAR>* csvCreateBook()
{
csvbook<TCHAR>* book;
book = new csvbook<TCHAR>;
return book;
}
И как результат
Book* book;
if (excelfileName.endsWith(".xlsx")) {
book = xlCreateXMLBook();
} else if (excelfileName.endsWith(".xls")) {
book = xlCreateBook();
} else {
book = csvCreateBook<char>();
}
Других решений пока нет …