gpt4 book ai didi

c++ - 静态鸭子打字与 CRTP

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:55 27 4
gpt4 key购买 nike

<分区>

这是来自 Static polymorphism in C++ 的后续问题

  • 什么时候我应该更喜欢鸭子打字?

  • 什么时候我应该更喜欢 CRTP?

  • 有什么最佳实践吗?

归结为:

template<typename T>
void print_renderer(const renderer<T> &r){
r.get();
}

对比

template<typename T>
void print_renderer(const T &r){
static_assert(is_renderer<T>,"Not a renderer");
r.get();
}

到目前为止我观察到的:

  • CRTP 不如运行时多态性好用。要创建多态接口(interface),某人只需使用 virtualoverride .这两个关键字都不能与 CTRP 一起使用。如果我在我的实现中有拼写错误,它将触发运行时错误。 (也许这可以避免)

  • 鸭子打字非常简单,但可能会让我的客户感到困惑。如果他们无法访问源代码并且必须使用 void print_renderer(T r)对比void print_renderer(renderer<T> r)我认为CRTP更清晰。

  • 鸭子打字确实有维护成本。在我之前的问题中,我创建了一个 open_gldirect_draw我的渲染器的实现。如果我想添加另一个渲染器,例如 open_gl_es ,我还必须更改我的 is_renderer<T>功能。但我认为这不会太糟糕。

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