Здравствуйте. Есть следующая задача: есть подсистема RPC, которая умеет посылать и принимать надёжный поток 4кб фреймов. Есть потенциально куча потребителей этой системы, которые хотят посылать через неё большие блобы. Какой из rpc правильнее всего выставить наружу интерфейс, который потребители могли бы сабклассить, что-то похожее на интерфейс итераторов, но с виртуальными функциями? По сути это два класса, class SendStream { virtual std::optional<std::string> next_chunk() = 0; } и class ReceiveStream { virtual void accept_chunk(std::optional<std::string>) = 0; }. Вот хочется не изобретать велосипед, в виде выставленных наружу нестандартных интерфейсов, а потребовать от реализаций предоставления экземпляров чего-то стандартного, типа файловых потоков... но не такого перегруженного. Ну или концепты хотя бы какие-то стандартные есть?
На самом деле нет ничего плохого в том чтобы завязаться на свой кастомный интерфейс, тем более такой простой - его на стороне пользователя поддержать дело пары минут. Зато представьте что в одном из следующих стандартов расширят стандартный интерфейс так, что вам будет невозможно или очень сложно его поддержать? Лучше для стандартных интерфейсов декораторы готовые сделать.
По поводу концептов, не забывайте что это уже C++20, готовы требовать от юзера его использование?