Я работаю над портативной библиотекой сжатия изображений C ++ с открытым исходным кодом . В настоящее время мой API работает путем обмена указателями на байтовые массивы с данными изображения. Я хотел бы поддерживать какой-то режим потоковой передачи для повышения производительности и потребления памяти.
Для этого я хотел бы знать, существует ли интерфейс или абстрактный базовый класс (часть стандартных библиотек C ++), который я могу использовать в качестве интерфейса для потока входных байтов, аналогично InputStream Java или C # Stream , Это может быть так просто:
class inputstream
{
public:
virtual void readbytes(char*, size_t count) = 0;
};
Я мог бы сам определить интерфейс, подобный этому, но тогда я требую, чтобы все внедрили какой-то адаптер для интерфейса с моим кодом и мой вкус обработки ошибок ввода-вывода, и я бы хотел этого избежать.
В идеале этот интерфейс или базовый класс уже были бы реализованы некоторыми существующими стандартными библиотеками C ++ для чтения файлов. Если это не базовый класс, он должен быть полностью абстрактным, чтобы мои пользователи могли подключаться к любому имеющемуся потоку данных (конкретному платформе, сокету и т. Д.). Я просмотрел в iostream, но не нашел ничего, что отвечало бы всем требованиям. Он должен быть как можно более легким: должна быть определена обработка ошибок, но нет необходимости искать поток.
Если такой вещи нет (чего я боюсь), есть ли что-то вроде существующей лучшей практики? Как указатель на функцию со стандартной подписью и контракт на обработку ошибок? Если есть креативные решения, которые будут работать и на Си, мне тоже интересно.
Редактировать: главное, чтобы методы read () базового класса были виртуальными.