Может ли кто-нибудь порекомендовать С++-оболочку для ncurses?
С++-оболочки для ncurses?
Ответ 1
ncurses включает в себя набор привязок С++. Я не знаю, содержат ли какие-либо из основных дистрибутивов привязки С++, но если вы получите источник ncurses, вы найдете их в каталоге С++.
Я не знаю, буду ли я обязательно рекомендовать их, но они, вероятно, являются лучшими связями на С++ и включают привязки для расширений форм, панели и меню. Они немного грубые вокруг краев, и документации не так много.
Ответ 2
Попробуйте этот проект для создания кукурузы. Это комплект разработки NCurses для С++
Ответ 3
Я написал свои собственные несколько лет назад... Я сделал это, потому что в Linux была установлена совместимая с ncurses библиотека, но не под Win32. (Я мог бы использовать PDCurses, но в то время я не мог помешать PDC_breakout() остановить операцию refresh(), не открывая исходный код.)
Эта обертка была написана в течение 7 дней, как часть быстрого развития. Таким образом, он имеет несколько (съемных) зависимостей от типов ввода/вывода, специфичных для программы, но их можно безопасно удалить.
В принципе, у меня есть две основные функции - инициализация, которая вызывает все функции инициализации проклятий и определения цветов, которые я не планирую позже настраивать, и функцию обновления, которая передает "внутренний" буфер отображения на выход.
В целом вы можете чувствовать себя более комфортно, создавая в индексной карточке или чит-лист, содержащий " initscr(); cbreak(); noecho(); move (y, x); addch (ch); endwin();", но если вы хотите использовать мою обертку, вы можете отправить мне сообщение или загрузить его из здесь, пока вы соблюдаете лицензия Creative Commons.
Ответ 4
Пару лет назад, когда мне это было нужно, я просмотрел несколько файлов проклятий, которые предоставляют проклятия С++ thingies. Хотя они "отлично работали", я был разочарован - этот новый код вводит еще больше "проклятых-макросов". Я не признал никаких попыток отключить макросы (нет пространства имен, всего несколько классов). Полагаю, это была не их цель.
В конце концов я решил, что эти макросы также натолкнулись на слишком много полезных символов, как это делают только макросы. Я закончил рефакторинг моего кода, чтобы свести к минимуму воздействие этих макросов.
По сути, я переместил несколько моих приложений, которые отображают вещи в 2 новых файла. Этот рефакторинг также создал несколько небольших новых методов, которые были добавлены в 2 новых файла "отображения". (11 файлов расширены до 13)
Как я уже сказал, они работают нормально, мой код не был затронут изменением, комментарии в cursesw.h предполагают, что он меняет макросы на строки, и я нахожу там некоторые классы.
cursesf.h имеет классы, используемые в другом месте, как и cursesm.h(для меню), и cursesw.h(для окон), curseslk.h(для набора мягких меток), все, что я еще не использовал.
Мне не понравилось cursesapp.h - возможно, это вещь Windows?
Могу ли я порекомендовать это? Ну, я предпочитаю этот код предыдущим проклятиям, хотя я реорганизую, чтобы сохранить макросы.
Ответ 5
Возможно, сверните свои собственные С++-обертки?
... Я создал несколько С++-оболочек для некоторых ncurses и функций и объектов CDK.
Тем не менее, я создавал только оболочки для функций и структур в качестве необходимой поддержки для своего небольшого проекта, который использует CDK и ncurses для своего графического интерфейса. Но они могут дать вам идеи для создания собственных С++-обложек вызовов CDK и ncurses, которые вам нужны.
В основном я использовал их, чтобы избежать утечек памяти, поскольку деструкторы С++ удаляют любые динамически созданные строки char * или используют std::string
вместо строк char*
и т.д.
Вот очень скромный пример:
class RXL_ncurses {
public:
static void draw(WINDOW * pWin, int y, int x, std::string lineOfText);
};
void RXL_ncurses::draw(WINDOW * pWin, int y, int x, std::string lineOfText) {
//
// Draw a std::string into the WINDOW*, starting at y,x
//
chtype letter;
unsigned int i;
unsigned int xPos;
unsigned int yPos;
for(i = 0; i < lineOfText.size(); i++) {
letter = (chtype) lineOfText[i];
xPos = i + x;
yPos = y;
mvwaddch(pWin, yPos, xPos, letter);
}
}
http://mrflash818.geophile.net/software/nc_834v5010generator/