gpt4 book ai didi

c++ - std::shared_ptr 到指针类型的隐式转换

转载 作者:太空狗 更新时间:2023-10-29 21:32:09 25 4
gpt4 key购买 nike

我有包装类来包装 C 库。在本例中为 SDL。我会将所有内容缩短到必要的细节,如果有遗漏,请在评论中告诉我。

例如,我有一个名为 texture_t 的类,它将包装 SDL_Texture

class texture_t
{
public:
...
private:
SDL_Texture *tex;
}

有时,它可能在shared_ptr中:

typedef std::shared_ptr<texture_t> texture_ptr_t;

现在,如果我想调用一个以 SDL_Texture * 作为参数的 SDL 函数,我需要我的 texture_t texture_ptr_t 隐式转换为它。

我尝试在我的类(class)中实现这些运算符:

operator SDL_Texture *(void);
operator const SDL_Texture *(void) const;

但我仍然收到 no viable conversion from texture_ptr_t to SDL_Texture * 错误。有人可以为我指明正确的方向吗?

最佳答案

即使没有使用原始指针的 shared_ptr,您也会遇到这些错误,所以我暂时放弃它。

隐式转换仅适用于 texture_t 对象,不适用于指向对象(智能或其他)的指针。它不起作用,因为 shared_ptr 和哑指针都没有转换为不相关的指针类型。

因此,要调用任何 SDL_func 并启动转换,您需要为 texture_t 提供一个 glvalue(引用)。这很容易通过取消引用来完成。

SDL_func(*ptr, /* other args */); // ptr can be a dumb pointer too.

但是说了这么多,这感觉像是一个有漏洞的抽象。如果您努力包装 SDL_Texture*,请不要半途而废。让 texture_t 成为一个完全值语义类型,在 SDL 库上提供抽象的操作。不要因为知道您使用的是什么库而为调用代码增加负担。如果以后需要的话,这将使切换库变得更加容易。

关于c++ - std::shared_ptr 到指针类型的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56091228/

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