gpt4 book ai didi

uwp - 如何使用 IVector 的 ReplaceAll 方法将数据从一个 IVector 传输到另一个 IVector?

转载 作者:行者123 更新时间:2023-12-05 05:11:16 26 4
gpt4 key购买 nike

我有 2 IVector s,我想用一个的所有内容替换另一个的内容。 ReplaceAll方法似乎可行。

所以我尝试了以下方法:

IVector<IInspectable> my_ivector1 = winrt::single_threaded_vector<IInspectable>({ box_value(L"whatever1") });
IVector<IInspectable> my_ivector2 = winrt::single_threaded_vector<IInspectable>({ box_value(L"whatever2") });
std::array<const IInspectable, 1> arrv{ box_value(L"result") };

my_ivector2.ReplaceAll(arrv);
auto res = unbox_value<hstring>(my_ivector2.GetAt(0)); // This works, res == L"result". The content of my_ivector2 was replaced by the content of arrv.

my_ivector2.ReplaceAll(my_ivector1); // compilation error

编译错误:

cannot convert argument 1 from 'winrt::Windows::Foundation::Collections::IVector<winrt::Windows::Foundation::IInspectable>' to 'winrt::array_view<const winrt::Windows::Foundation::IInspectable>'

我希望能够使用 ReplaceAll将一个 IVector 的所有内容替换为另一个 IVector 的内容。是ReplaceAll不是正确的方法吗?

最佳答案

由于您使用的是 C++ WinRT 类型,而不是投影向量,因此在上面的简单示例中,您可以使用 get_container() 获取对基础 std::vector 的引用。您需要将变量类型更改为自动而不是 IVector<>。从那里,您可以根据需要使用您喜欢的任何标准库技术将元素从一个向量移动或复制到另一个向量。简单的赋值应该足以复制内容。例如

my_ivector2.get_container() = my_ivector1.get_container();

如果您尝试使用 WinRT 向量,但不知道它们是您的 C++/WinRT 实现,则您需要使用 array_view 复制值。

array_view 和 vector 不可互换,尽管它们看起来应该如此。它们提供略有不同的语义和保证。您需要在第一个容器上使用 GetMany 将值加载到调整为容器大小的 std::vector 之类的东西中,然后用第二个容器调用 ReplaceAll。

关于uwp - 如何使用 IVector 的 ReplaceAll 方法将数据从一个 IVector 传输到另一个 IVector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55611490/

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