gpt4 book ai didi

c++ - C 风格数组与库接口(interface)的 std::array

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:37 31 4
gpt4 key购买 nike

我想编写一个带有提供读取功能的接口(interface)的库。C 风格的数组容易出错,但允许传递任何大小的缓冲区。C++ 数组更安全,但强制使用大小来构造。

// interface.h

// C-style array
int read (std::uint8_t* buf, size_t len);

// C++ array
int read (std::array<std::uint8_t, 16>& buff)

我怎样才能两全其美?

我在考虑函数模板,但它对于库接口(interface)来说似乎不实用。

template <size_t N>
int read (std::array<std::uint8_t, N>& buf);

编辑 std::vector可能是一个很好的候选人,但如果我们考虑到 char*std::array没有动态分配。

编辑 我非常喜欢 gsl::span 的解决方案.我坚持使用 C++14,所以没有 std::span .我不知道使用第三个库 (gsl) 是否会成为问题/允许。

编辑 我不认为使用 char在另一种类型上可能会对答案产生一些影响,所以更清楚地说是操纵字节。我改charstd::uint8_t

编辑 由于 C++11 保证返回 std::vector将移动而不是复制,返回 std::vector<std::uint8_t>是可以接受的。

std::vector<std::uint8_t> read();

最佳答案

你可以做标准库做的事情:使用一对 iterators .

template <typename Iter> int read(Iter begin, Iter end)
{
// Some static assets to make sure `Iter` is actually a proper iterator type
}

它为您提供了两全其美:稍微更好的安全性和读取缓冲区任意部分的能力。它还允许您读入非连续容器。

关于c++ - C 风格数组与库接口(interface)的 std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829703/

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