C++ 中可通过虚函数实现运行时多态,还可以实现更高效的静态多态。
通过把派生类作为基类的模板参数来实现,该方式称为CRTP(Curious Recurring Template Pattern)。
#include <iostream> using namespace std; // 中间类 template <class T> class BaseClass { public: // 强转,调用指定对象方法 void Func(){ static_cast<T&>(*this).funcImpl(); } private: void funcImpl(){ cout << "Base class" << endl; } }; // 基类 class Base : public BaseClass<Base> { }; // 派生类 class Derived : public BaseClass<Derived> { public: void funcImpl(){ cout << "Derived class" << endl; } }; /// main int main(int argc, char **argv) { BaseClass<Derived> derv; derv.Func(); BaseClass<Base> bas; bas.Func(); return 0; }
运行结果:
Derived class
Base class
相关推荐
CRTP技术白皮书.pdf
stl_interfaces Boost.Iterator的iterator_facade和iterator_adaptor部分(现在称为iterator_interface )的更新的C ++ 20友好版本; C ++ 20的view_interface的C ++ 20之前版本; 还有一个名为container_interface...
ORTP 很详细的RTP/RTCP控制源代码。 适用与linux window
SecureCRTPortable 查看后台,用命令进行操作
3.2.1 CRTP的配置 34 3.2.2 帧中继的考虑因素 35 3.3 排队法 37 3.3.1 FIFO排队法 37 3.3.2 优先级排队法 37 3.3.3 自定义排队法 38 3.3.4 加权公平排队法 39 3.4 PPP增强 41 3.5 数据流整形 43 3.6 资源保留协议 45...
该设计通过使用诸如CRTP和Params对象之类的方法来试图减少运行时的执行时间。 该库中未使用任何虚拟类/方法。 计划在将来添加更多的性能提升功能。 其中之一是C ++ 20发布后用于字符串连接的constexpr 。依存关系 ...
仅将LLVM样式用于MLIR覆盖或CRTP挂钩。 遵循MLIR。特别是,IR属性,类型和操作应通过FileCheck使用文本IR格式进行测试。非红外组件应通过单元测试进行测试。 制作说明 先决条件: 支持C ++ 17的C ++编译器; git,...
CRTP 像普通功能一样的特质 像这样的概念 宏可为模板化类型生成自己的特征 元组像带有方括号表示法的数组 使用类型列表进行类型操作 对于每个元组 谓词 不需要迭代器 算法中允许成员函数 查找退货选项单子 压缩 索引...
这个工具是我在业余时间创建的,可以帮助渗透测试人员自动化他们日常工作中要执行的基本枚举步骤,并且可以在AD实验室中使用(CRTP / CRTE / CRTO / Offshore..etc) (扰流器:此工具远非完美。) 安装 git clone ...
与crazyflie的通信以及用于控制Crazyflie的CRTP协议的实现由项目处理。 安装 请参阅github docs文件夹中的。 官方文件 在我们的网站上查看。 贡献 鼓励每个人通过分叉Github存储库并提出请求或提出问题来为...