#pragma once class FileReaderFactory; #include class FileReader { protected: virtual void open(const std::string url) = 0; public: virtual void close() = 0; virtual const std::string read() = 0; public: virtual ~FileReader() = default; protected: FileReader() = default; virtual FileReader * clone() const = 0; protected: FileReader(const std::string protocol); friend FileReaderFactory; };