如何解决如何在C ++ / WinRT中制作向量的深层副本?
我在C ++ / WinRT WinUI3项目中通过IObservableVector
实现了UIElements
的私有single_threaded_observable_vector
。我们称之为m_precious_vector
。我有一个PreciousVector
的getter函数,我想从中返回m_precious_vector
的深层副本,因此没有客户端可以在不经过单独的setter函数的情况下修改m_precious_vector
,但是我似乎无法找出如何创建除浅表副本以外的任何内容。
如果我要留下更多信息,请发表评论:)
编辑:更多信息,请保证,谢谢评论者!
我首先尝试查看吸气剂是否将通过引用或值返回。我能够从getter中编辑矢量本身,因此我假设它是一个参考(我在问题的后面有一段代码)。我尝试通过在ProjContent :: PreciousVector()中进行以下操作来制作深层副本:
# ProjContent.h
# Some header files...
namespace winrt::Proj::implementation
{
struct ProjContent : ProjContentT<ProjContent>
{
public:
# ... other code ...
winrt::Windows::Foundation::Collections::IObservableVector<Microsoft::UI::Xaml::Controls::NavigationViewItem> PreciousVector();
private:
# ... other code ...
winrt::Windows::Foundation::Collections::IObservableVector<Microsoft::UI::Xaml::Controls::NavigationViewItem> m_preciousVector;
};
}
# ProjContent.cpp
# some header files...
namespace muxc
{
using namespace winrt::Microsoft::UI::Xaml::Controls;
};
# ... more other code ...
winrt::Windows::Foundation::Collections::IObservableVector<muxc::NavigationViewItem> ProjContent::PreciousVector()
{
return winrt::Windows::Foundation::Collections::IObservableVector<muxc::NavigationViewItem> {m_preciousVector};
}
命名不是最好的,谢谢您的支持。
我相信这会创建一个浅表副本,因为我从同一命名空间中的另一个类使用此getter进行了测试,并直接根据返回的值编辑了向量,并观察到另一个PreciousVector()。Size()的大小变化。 )。
# ProjViewModel.h
# Some header files...
namespace winrt::Proj::implementation
{
struct ProjViewModel : ProjViewModelT<ProjViewModel>
{
public:
# ... other code ...
private:
# ... other code ...
Proj::ProjContent m_projContent{ nullptr };
};
}
# ProjViewModel.cpp
# Some header files
using namespace winrt;
namespace muxc
{
using namespace winrt::Microsoft::UI::Xaml::Controls;
};
namespace winrt::Proj::implementation
{
# ... other code ...
winrt::Windows::Foundation::IAsyncAction ProjViewModel::AddContent()
{
co_await winrt::resume_foreground(m_dispatcher); # m_dispatcher is tied to the UI thread
# using the debugger,size is 0 here.
int size = m_proj_content.PreciousVector().Size();
muxc::WebView2 worldWV;
m_proj_content.PreciousVector().Append(worldWV);
# using the debugger,size is 1 here.
size = m_proj_content.PreciousVector().Size();
}
我想尝试使用“ new”关键字,但现在已弃用该关键字,它不会让我失望。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。