首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >type_traits -连续内存

type_traits -连续内存
EN

Stack Overflow用户
提问于 2015-10-11 17:30:43
回答 1查看 774关注 0票数 5

我有一个处理任何容器类型的接口。std::vectorstd::array,甚至std::basic_string。问题是,没有什么可以阻止某人通过一个没有成功记忆的容器。

我目前的解决方案是delete那些我想阻止的接口。

代码语言:javascript
复制
void dosoemthing(const std::list&)=delete;
void dosoemthing(const std::map&)=delete;

但是,我更希望能够添加一个基于类型特征的静态断言。这就引出了我的问题。它们是否存在可用于识别其内存是否连续的容器的类型特征?我一直在通过文档,还没有发现任何东西。我想,在把它标记为失败的原因之前,我会向A队查询。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-11 17:49:03

您可以携带您自己的类型特性,然后使用static_assert验证它:

代码语言:javascript
复制
#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 {};
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33067983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档