gpt4 book ai didi

c++ - 从 std::shared_ptr 初始化 std::shared_ptr

转载 作者:搜寻专家 更新时间:2023-10-31 02:14:26 29 4
gpt4 key购买 nike

我在尝试从 std::shared_ptr<void> 中“复制”时遇到了它模板化 std::shared_ptr<T> .它看起来像这样:

template < >
class TDynamic< void >
{
protected:
std::shared_ptr< void > m_pointer;
public:
// Here i got constructors, functions etc
template < typename U >
TDynamic< U > SwitchType()
{
TDynamic< U > returnValue;
returnValue.m_pointer = std::shared_ptr< U >(m_pointer); // error here
}
};

错误是这样说的:

c:\...path_here...\tdynamic.hpp(426): error C2440: 'type cast': cannot convert from 'const std::shared_ptr< void >' to 'std::shared_ptr< T >'
1> with
1> [
1> T=grim::Actor
1> ]
1> c:\...path_here...\tdynamic.hpp(426): note: No constructor could take the source type, or constructor overload resolution was ambiguous

编译器和 IDE:Visual Studio 2015 社区

对于这种情况,这对我来说是必要的。假设我有类“Actor”和派生类“APlayer”

class Actor
{
public:
};
class APlayer
: public Actor
{
public:
};

int main()
{ // some code here
TDynamic< APlayer > test1(new APlayer);
TDynamic< void > test2(test1);
TDynamic< Actor > test3(test2); // error here
}

我可以将整个代码粘贴到此处,但大约有 550 行,其中大部分都无关紧要。我只需要复制那个 std::shared_ptr .

最佳答案

您可以使用 static_pointer_cast :

returnValue.m_pointer = static_pointer_cast<U>(m_pointer);

由您来保证此转换是合法的(它被定义为与 static_cast<U*>(m_pointer.get()) 一样合法)。

关于c++ - 从 std::shared_ptr<void> 初始化 std::shared_ptr<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935061/

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