gpt4 book ai didi

c++ - Apache thrift "TProtocol class"设计原则-C++,为什么需要 "writeBool()"

转载 作者:行者123 更新时间:2023-11-30 04:04:05 25 4
gpt4 key购买 nike

目前,我一直在阅读“Apache Thrift”的源代码。更具体地说,用C++实现的代码放在这个路径中:“thrift-0.9.1.tar\thrift-0.9。 1\lib\cpp".

一直在想为什么“TProtocol类”要这样设计:

我们知道“TProtocol Class”是一个抽象类。并且这里有详细的分析: “developermemo”。并说“还定义了相应的抽象工厂类,用于具体协议(protocol)对象的生产,这是最常用的设计模式抽象工厂设计模式。”

但是,我很纳闷为什么他们定义一个函数对应的纯虚函数就被调用了。例如:

  virtual uint32_t writeSetEnd_virt() = 0;
virtual uint32_t writeBool_virt(const bool value) = 0; //Pure virtual function

uint32_t writeBool(const bool value) { //
T_VIRTUAL_CALL();
return writeBool_virt(value); //call the "interface"
}

为什么我们需要“writeBool()”。好像没用。为什么我们不直接定义“纯虚函数”和“派生类”重写这些接口(interface)。

最佳答案

这是一种称为“模板方法”的模式。您通常具有公共(public)非虚拟函数和私有(private)虚拟函数的这种组合。除了转发之外,public 还做一些事情,比如检查先决条件和后置条件、日志记录和简单的转换。私有(private)的、虚拟的做实际的工作。将其设为私有(private)的理由是明确表示您无法选择调用基本版本,否则您可以通过显式 derived.base::foo() 调用来实现。如果您需要扩展基础版本,您也可以改为保护它,但这里不是这种情况。

关于c++ - Apache thrift "TProtocol class"设计原则-C++,为什么需要 "writeBool()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com