gpt4 book ai didi

c++ - 我喜欢对我正在玩的这个模板设计理念发表评论

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:20 25 4
gpt4 key购买 nike

我一直在教游戏编程,我花了很多时间谈论打破依赖关系,目标是在引入新代码时旧代码不应更改。我们正在设置一个渲染器对象,我决定将渲染函数模板化,这样我就可以展示特征类等的一些用途。但这导致了一个有趣的想法。

如果我从不提供通用主体,只提供完全特化,那么可以扩展渲染类,了解它可以从外部代码渲染什么,如果渲染的对象没有完全特化,编译器会失败,而不是 exe .这让使用该系统的游戏有机会构建自定义可渲染对象并扩展功能,而无需更改渲染器 hpp 或 cpp 文件。

这是一个已知的设计模式,还是一个糟糕的想法,为什么,或者有其他人这样做过吗?我很想知道这里是否存在严重问题,因为我所看到的都是积极的。

谢谢大家。

这里是格式化的代码。

我做的有点不同,所以客户端代码不知道它是一个模板。

class Renderer
{
public:
void SwapBuffers();

template<typename RenderObj>
void Render(const RenderObj&);
};

// Full specializations
class Sprite;
template<> void Renderer::Render<Sprite>(const Sprite&);

最佳答案

如果我正确理解了您的描述:

template <class> class render; // undefined

template <>
class render<Object1>
{
// ...
};

template <>
class render<Object2>
{
// ...
};

// ...

我认为这是一种有效的方法。有时您可以填写一般案例主模板,有时则不能。编译时错误指示您何时不能优于运行时错误(如您所说)。

我会说设计模式是众所周知的,尽管我不能给它起一个名字。 C++11 中的 std::function 遵循类似的模式,尽管客户端通常不提供专门化(尽管理论上可以):

template <class> class function; // undefined

template<class R, class... ArgTypes>
class function<R(ArgTypes...)>
{
// ...
};

关于c++ - 我喜欢对我正在玩的这个模板设计理念发表评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5441316/

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