现在我正在开发一个基于终端的应用程序,它利用了一些显示库。我的程序流程如下:
main.cpp
\ feature1.cpp
|
\feature2.cpp
|
\ feature3.cpp
|
\feature4.cpp
主类处于无限循环中,允许您选择四个功能中的一个。选择后,它将进入该功能的无限循环,一旦功能到达其退出状态,该循环将终止。退出后,我的程序返回主循环并允许再次接收输入以选择另一个功能。
我遇到的问题是我在main.cpp
文件中设置了一个信号,以检测终端窗口的调整大小。如果它低于一定的尺寸我想做点什么。同样,我想为用户可能处于的每个功能做一些不同的事情。我的信号调用如下所示:
signal(SIGWINCH, detectResize); //detectResize(int sig) handles resize
如何使信号目标成为与当前功能对应的正确功能?最初我尝试在每个名为handleResize()
的类中创建一个方法,并且每次调用signal()
函数将其更改为正确的类。例如:
if(feature1 is selected)
{
signal(SIGWINCH, f1.handleResize);
feature1 f1(); //start feature 1 loop
}
这不起作用,因为在创建对象之前,我无法弄清楚如何传递f1.handleResize
。我对C ++没有太多经验。有没有更好的方法来解决这个问题?如果它是Java,我正在考虑创建一个Resize
接口(C ++类)并使每个功能实现它。然后,我可以通过某个全局变量跟踪正在使用的功能,并从<feature>.handleResize()
中的handleResize()
函数调用相应的main.cpp
。这样的事情是可能的,还是有更优雅的C ++方法?