Chr*_*ine 9 c++ templates stl static-assert c++11
在模板化函数中,其中一个参数是类型的标准库容器T,我可以轻松地静态断言这T是一个有序容器吗?
有没有更优雅的方式来做这个比做类型特定的事情,比如测试一个hash_function()功能的存在来区分std::map和std::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> {};
然后你可以以任何一种方式使用它。
| 归档时间: | 
 | 
| 查看次数: | 1248 次 | 
| 最近记录: |