Мне любопытно узнать, как вы можете нарисовать/обновить определенный регион терминала/консоли. Есть ли для этого кросс-платформенные библиотеки?
Причина, по которой я хочу знать, заключается в том, что я разрабатываю приложение командной строки мгновенного сообщения, и мне было любопытно узнать, как я могу обновить средство просмотра сообщений (куда все сообщения идут) отдельно, где вы пишете команды/текст для других людей в чат. Очевидно, если бы я просто попытался получить вход и записать в cout, то вход, который вводит пользователь, и сообщения будут "помешаны" (вмешательством я имею в виду разбиение на несколько строк).
Я думал об использовании двух объектов потока: один для сохранения представления (сообщений/вывода с сервера) и один для хранения ввода от пользователя и просто перерисовывать по мере необходимости. Однако это кажется неэффективным, и мне требуется очистить экран (в этом случае я не знаю, как эффективно очищать экран и кросс-платформенно).
Я также думал о просто переключении на Qt/wxWidgets, поскольку это могло бы упростить создание графического интерфейса.
Используйте библиотеку ncurses для записи текстовых пользовательских интерфейсов независимым от терминала образом.
Как предложил @Naruto, ncurses - хороший способ пойти. На гораздо более базовом уровне вы также можете просто использовать escape-коды ANSI для перемещения курсора по экрану:
Например, чтобы поместить курсор в строку 5, столбец 23, вы можете ввести это
echo -n "\033[5;23H"
Есть несколько примеров здесь.