-
Notifications
You must be signed in to change notification settings - Fork 235
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow getting array_view/span out of IBuffer and IMemoryBuffer #360
Comments
I've tagged a few project maintainers. If one of them is available to offer guidance and mentorship for this issue, they will reach out according to the contributing guide to discuss and agree on an approach. @microsoft/cppwinrt-maintainers |
@JaiganeshKumaran can you write a little sample code showing what you'd like to see? |
template <typename D>
struct consume_Windows_Foundation_IMemoryBufferReference
{
/* existing code unchanged */
auto view() const
{
uint8_t* data{};
uint32_t capacity{};
check_hresult(static_cast<D const&>(*this).template as<IMemoryBufferByteAccess>()->GetBuffer(&data, &capacity));
return array_view(data, capacity);
}
};
template <typename D>
struct consume_Windows_Storage_Streams_IBuffer
{
/* existing code unchanged */
auto view() const
{
uint8_t* data{};
check_hresult(static_cast<D const&>(*this).template as<IBufferByteAccess>()->Buffer(&data));
return array_view(data, Length());
}
}; Now you can write IBuffer buffer = get_some_buffer_from_somewhere();
auto view = buffer.view(); // returns an array_view<uint8_t>
IMemoryBufferReference ref = memorybuffer.CreateReference();
auto view = ref.view(); // returns an array_view<uint8_t> This is much safer than using |
Not really a fan of having a separate Another thing to consider is allowing to take a |
I don't think it should be deleted, as you've shown there are valid usages of r-values. |
If the operator is explicit, then it actually gets worse because you have to perform the wordy conversion explicitly.
The explicit conversion from |
For safety, the conversion operator can be explicit.
The text was updated successfully, but these errors were encountered: