【发布时间】:2020-02-05 20:55:32
【问题描述】:
我有一个应用程序,当对应用程序执行某个操作时,它会调用回调函数。
在这个回调函数中,我想调用一个解析器(例如一个命令行解析器)。
只有当用户在命令行上使用“quit”命令时,此解析器才会在 while 循环中运行并退出并返回回调。
在 while 循环中,用户始终可以访问命令行。根据命令行上的用户输入,解析器采取独特的行动。例如,它将设置一个变量并像这样进入数据库:
command-line>a 100
command-line>
这里将 DB 中的参数a 设置为 100。
我想使用面向对象的设计对解析器进行建模。在这种情况下我可以使用哪种设计模式?
【问题讨论】:
-
你确定你需要一些非常花哨的图案吗?我只是让解析器成为一个具有
parseCommand(std::string command)之类的函数的类,然后从从用户输入/命令行读取的 while 循环中调用该类。编辑:哦,你到底想要一个解析器本身的设计,还是只为你的标题所暗示的调用步骤? -
听起来像XY problem
-
在回调中运行命令解释器听起来可能会被锁定。
-
拥有一个有效的执行回调的 shell 是很自然的,而不是相反。一个简单的输入解析器只读取一整行输入,在空间上拆分它(如果您不必担心引用的字符串,这很简单),并检查第一个子字符串以查找要调用的“命令”,然后调用其对应的函数传递参数向量。
-
除非您希望 shell 锁定进程,否则也有一些解决方案。例如,将外壳和其余处理拆分为单独的线程。或者您可以轮询标准输入以查看是否有可读取的内容,如果没有,则进行一些处理,否则读取并处理一个命令。
标签: c++ oop design-patterns