gpt4 book ai didi

c++ - type_traits - 连续内存

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

我有一个处理任何容器类型的接口(interface)。 std::vectorstd::array,甚至 std::basic_string。问题是没有什么可以阻止某人传递没有连续内存的容器。

我目前的解决方案是删除那些我想阻止的接口(interface)。

void dosoemthing(const std::list&)=delete;
void dosoemthing(const std::map&)=delete;

但是,如果我可以只添加一个基于类型特征的静态断言,我会更愿意。这引出了我的问题。它们是否存在可用于识别其内存是否连续的容器类型特征?我一直在通过 documentation 来还没有找到任何东西。我想在将其标记为失败原因之前,我会与 A 团队核实。

最佳答案

可以带上自己的类型特征,然后用static_assert来验证:

#include <type_traits>
#include <vector>
#include <array>

template<typename T>
struct has_contiguous_memory : std::false_type {};

template<typename T, typename U>
struct has_contiguous_memory<std::vector<T, U>> : std::true_type {};

template<typename T>
struct has_contiguous_memory<std::vector<bool, T>> : std::false_type {};

template<typename T, typename U, typename V>
struct has_contiguous_memory<std::basic_string<T, U, V>> : std::true_type {};

template<typename T, std::size_t N>
struct has_contiguous_memory<std::array<T, N>> : std::true_type {};

template<typename T>
struct has_contiguous_memory<T[]> : std::true_type {};

template<typename T, std::size_t N>
struct has_contiguous_memory<T[N]> : std::true_type {};

关于c++ - type_traits - 连续内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33067983/

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