gpt4 book ai didi

c++ - 订购标准库容器类型的 static_assert() 的优雅方式?

转载 作者:可可西里 更新时间:2023-11-01 16:40:41 25 4
gpt4 key购买 nike

在一个参数是 T 类型的标准库容器的模板化函数中,我可以轻松地静态断言 T 是一个有序容器吗?

有没有比做特定类型的事情更优雅的方法来做到这一点,比如测试是否存在 hash_function() 函数来区分 std::mapstd::unordered_map ?

最佳答案

另一个简单的:

template <template <typename...> class Container>
struct is_ordered : std::false_type {};

template <> struct is_ordered<std::map> : std::true_type {};
template <> struct is_ordered<std::set> : std::true_type {};
template <> struct is_ordered<std::multimap> : std::true_type {};
template <> struct is_ordered<std::multiset> : std::true_type {};

然后就是static_assert(is_ordered<Container>::value, "error")使用它。扩展到自定义容器也很容易:只需像上面那样添加一行。

如果您不想在调用站点使用模板模板,您可以随时将其包装起来:

template <typename T> struct is_ordered_2 : std::false_type {};
template <template <typename...> class Container, typename... Ts>
struct is_ordered_2<Container<Ts...>> : is_ordered<Container> {};

然后您可以任意使用它。

关于c++ - 订购标准库容器类型的 static_assert() 的优雅方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683044/

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