我在消息传递应用程序中使用 Google Protocol Buffer 。 proto 通常嵌套了好几层,我们采纳了 Google 的建议并将它们全部设为可选。原型(prototype)可以描述许多不同类型的重叠消息——即 Type == X 的消息应该包含成员 my_X,Type == Y 应该包含 my_Y。此外,某些字段组合对哪些字段应该出现以及它们应该具有什么值施加了其他限制。更改原型(prototype)的结构超出了我的能力范围。
现在,所有这些验证都是一堆 if..else 语句。如果案例不重叠,那可能是可行的,但验证案例可能会对某个字段施加不同的限制,因此它会变得非常难看。有没有更好的办法?我的目标是使代码更易于维护。我稍微研究了仿函数/谓词,看起来这可能会简化问题,但它似乎仍然是一团糟。
最佳答案
如果代码开始包含太多 ifs 和 elses,那么有时表驱动方法就是解决方案。 Code Complete Edition 2的第18章通过大量示例很好地解释了这个概念。您可以在 this article 中找到一些示例
希望能有所帮助。
关于c++ - 如何简化 C++ 中复杂的嵌套 protobuf 验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3198325/