有什么方法可以在C++中读取文本并执行这样的代码命令吗?

Is any way to read text and execute that such a code command in C++?

本文关键字:执行 代码 命令 取文本 方法 什么 读取 C++      更新时间:2023-10-16

我想从文本框中捕获彩色 rgb 数据,格式为 (r,g,b,a) 并创建:

QColor mColor = QColor(r,g,b,a);

有什么方法可以读取文本并执行这样的代码命令吗? 例如,如果我们假设execute这样做:D:

mColor = execute ("QColor"+"(r,g,b,a)");

可能吗?

是的,有很多方法,我列出一些:
if语句:

std::string command;
if (command == "QColor")
{
m_color = //...;
}

使用std::map

typedef (void) (*Function_Pointer)(const std::string& arguments);
void ProcessQColorCommand(const std::string& arguments);
std::map<string, Function_Pointer> dispatcher;
dispatcher["QColor"] = ProcessQColorCommand;
//...
std::map<string, Function_Pointer>::iterator iter;
iter = dispatcher.find(command);
if (iter != dispatcher.end())
{
(*iter->second)(arguments);
}

你也可以制作一个字符串和函数指针的表并使用它。

您可能还想研究"词法"和"解析"。

让我重新措辞以确保我正确理解您的问题:

你会得到一个QString,它可以是用户输入,看起来像:

"mColor = execute (\"QColor\"+\"(r,g,b,a)\");">

您想通过分析此QString来构建QColor对象并检测正确的参数吗?所以本质上你需要一个函数,将QString作为输入并给出QColor作为输出?

在这种情况下,我认为您应该使用正则表达式(http://doc.qt.io/qt-5/qregularexpression.html)。这应该可以帮助您从QString中提取所需的信息,了解其结构应该是什么(并检测语法是否不正确)。

这完全取决于您尝试检测的内容的复杂性。对于非常简单的事情,你可以使用一个古老的"if"语句,正如托马斯·马修斯所建议的那样。

对于更复杂的内容,正则表达式是一个不错的选择。

然后,如果您需要能够解释更复杂的输入,则必须执行完整的解析器。但就你而言,我怀疑你需要走那么远。