我有一个处理任何容器类型的接口。std::vector,std::array,甚至std::basic_string。问题是,没有什么可以阻止某人通过一个没有成功记忆的容器。
我目前的解决方案是delete那些我想阻止的接口。
void dosoemthing(const std::list&)=delete;
void dosoemthing(const std::map&)=delete;但是,我更希望能够添加一个基于类型特征的静态断言。这就引出了我的问题。它们是否存在可用于识别其内存是否连续的容器的类型特征?我一直在通过文档,还没有发现任何东西。我想,在把它标记为失败的原因之前,我会向A队查询。
发布于 2015-10-11 17:49:03
您可以携带您自己的类型特性,然后使用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 {};https://stackoverflow.com/questions/33067983
复制相似问题