如何知道 ncurses 的 initscr() 是否被调用过?
How to know if initscr() of ncurses has been called earlier?
目前比较好奇的是,有没有办法知道 <ncurses.h>
的 initscr()
之前是否被调用过?我认为调用 initscr()
两次是个坏主意。
您可能有一个 bool 变量,它被初始化为 false,并在调用 initscr()(并执行其他初始化)后立即设置为 true。缺点是你必须记得检查 bool 变量,并在调用 initscr() 后设置它。
link中有一个简单的例子:http://math.hws.edu/orr/s04/cpsc225/curses.html
注意:正如 Jonathon Leffler 在评论中指出的那样,这个 link 总体上不是一个很好的例子,我只是向您指出他初始化所有内容的代码片段来举个例子。
我对这个库不熟悉,不过看起来你也可以声明一个 WINDOW* 并将其设置为 null,然后稍后检查它是否为 null 以查看它是否被调用.我从谷歌搜索中找到的文档说,在失败时函数不会 return 所以如果它是 运行 你就不会有空指针。这在本质上与使用 bool 相同,但可能不那么混乱(检查指针以查看它们是否为 null 是常见的 C 习惯用法)。
一种非常 C++ 的方法是创建一个 class 来包装 WINDOW*,或者由函数 return 编辑的任何内容,然后调用 initscr( ) 在构造函数中。如果有相应的函数来释放它,在析构函数中调用它。通过使用a singleton design pattern,class只能构造一次。
一种更安全的方法是将 WINDOW* 包装在 std::unique_ptr 中,但将自定义删除器传递给它 (How do I use a custom deleter with a std::unique_ptr member?) - 假设有一个函数可以解除分配 window.
那你的析构函数什么都不需要,智能指针会帮你处理。
当 initscr
is called successfully, it sets the variables stdscr
and curscr
, which are only non-null after initialization. You do not need extra variables for this purpose. curses also initializes the variables LINES
and COLS
, which usually give the actual screen size (except as noted in the use_env
手册页时)。
如评论中所述,如果成功,initscr
只会向调用者发送 return。它的补码 newterm
初始化相同的变量,但如果不成功可以 return 给调用者。
目前比较好奇的是,有没有办法知道 <ncurses.h>
的 initscr()
之前是否被调用过?我认为调用 initscr()
两次是个坏主意。
您可能有一个 bool 变量,它被初始化为 false,并在调用 initscr()(并执行其他初始化)后立即设置为 true。缺点是你必须记得检查 bool 变量,并在调用 initscr() 后设置它。
link中有一个简单的例子:http://math.hws.edu/orr/s04/cpsc225/curses.html
注意:正如 Jonathon Leffler 在评论中指出的那样,这个 link 总体上不是一个很好的例子,我只是向您指出他初始化所有内容的代码片段来举个例子。
我对这个库不熟悉,不过看起来你也可以声明一个 WINDOW* 并将其设置为 null,然后稍后检查它是否为 null 以查看它是否被调用.我从谷歌搜索中找到的文档说,在失败时函数不会 return 所以如果它是 运行 你就不会有空指针。这在本质上与使用 bool 相同,但可能不那么混乱(检查指针以查看它们是否为 null 是常见的 C 习惯用法)。
一种非常 C++ 的方法是创建一个 class 来包装 WINDOW*,或者由函数 return 编辑的任何内容,然后调用 initscr( ) 在构造函数中。如果有相应的函数来释放它,在析构函数中调用它。通过使用a singleton design pattern,class只能构造一次。
一种更安全的方法是将 WINDOW* 包装在 std::unique_ptr 中,但将自定义删除器传递给它 (How do I use a custom deleter with a std::unique_ptr member?) - 假设有一个函数可以解除分配 window.
那你的析构函数什么都不需要,智能指针会帮你处理。
当 initscr
is called successfully, it sets the variables stdscr
and curscr
, which are only non-null after initialization. You do not need extra variables for this purpose. curses also initializes the variables LINES
and COLS
, which usually give the actual screen size (except as noted in the use_env
手册页时)。
如评论中所述,如果成功,initscr
只会向调用者发送 return。它的补码 newterm
初始化相同的变量,但如果不成功可以 return 给调用者。