c++ - 有没有更简单的方法来“汇集”函数调用?
问题描述
我正在编写一个处理读取文本文件的程序。
根据文件中每一行的起始关键字,我想调用不同的函数。
void funnel(string line) {
if (line.find("Keyword1", 0) == 0){
call_function1();
}
else if (line.find("Keyword2", 0) == 0){
call_function2();
}
else if (line.find("Keyword3", 0) == 0){
call_function3();
}
............
}
有没有更简单/更好/更有效的方法来做到这一点,还是我被这个空漏斗的东西困住了?
ClientConnect: (blake_won) ID: 0 (IP: 192.168.0.177:29071)
Kill: 0 0 7: blake_won killed blake_two by MOD_SWORD
这些行看起来像这样,我想根据每个起始关键字调用适当的函数。该文件不是我自己的,所以我无法控制写入它的内容。
解决方案
正则表达式可以真正帮助从统一模式中收集信息,如下所示:
std::regex pattern { R"(^(\w+):)" };
std::map<std::string, std::function<void()>> dispatch {
{ "function1", function1 },
{ "function2", function2 }
};
void funnel(const std::string& line) {
std::smatch match;
if (std::regex_search(line, match, pattern) && match.size() > 1) {
auto command = match.str(1);
auto fn = dispatch.find(command);
if (fn != dispatch.end()) {
fn->second();
} else {
std::cout << "command not recognized" << std::endl;
}
} else {
std::cout << "pattern doesn't match";
}
}
推荐阅读
- c - CS50 现金有效输入退出程序
- android - Android 设备呈现与 Chrome 响应式检查模式不同的 webview 应用程序
- batch-file - 批量删除文件名中的字符而不更改扩展名
- azure - Azure Powershell 脚本:文件路径(这里提到什么路径)?
- r - 如何从配方中排除某些变量?
- python - 如何获取 MIPSDK 的 ImageServer 的授权令牌
- python-3.x - ValueError: X 每个样本有 1709 个特征;期待 2444
- java - 使用 Apache POI 和 Maven 在 Excel 中创建条形图时出错
- rabbitmq - 是否可以对 rabbitmq-management 插件使用基于证书的身份验证?
- r - 如何创建一个数据框,其中字段是另一个数据框中的值