我如何从模板参数中提取value_type (std::vector和plain pointer)
How do I extract the value_type from template parameters (std::vector and plain pointer)?
我有一个具有以下接口的排序:
template< class RandomIt >
void my_sort( RandomIt first, RandomIt last )
{
}
我期望RandomIt
是来自std::vector<T>.begin()/end()
的迭代器或普通指针类型T* first,T* last
。我想如果我假设RandomIt
是一个向量,我可以从RandomIt::value_type
得到它,但这对T* first,T* last
不起作用。
我的问题是,在这两种情况下,我如何从模板参数中提取value_type T
?
使用iterator_traits<T>::value_type
(cppreference)。注意,标准库为T*
和const T*
提供了iterator_traits定义,因此它也适用于普通指针。
由于您使用的是c++ 11,您可以在迭代器本身上应用decltype
来获得value_type
:
typedef decltype(*first) value_type;
注意,如果程序员没有为他的迭代器专门化iterator_traits
,或者他没有定义符合标准要求的迭代器,那么iterator_traits
可能不适用于程序员定义的类型。
然而,decltype
技巧即使在这种情况下也会起作用。
相关文章:
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- C++ "错误:在'类 std::result_of< ... >"中没有名为'type'的类型"
- 如何解决"'mutex' in namespace 'std' does not name a type"?
- 如何摆脱导入的 make 项目中的 Eclipse 索引器"Type std::... could not be resolved"错误
- clang C++17 std::vector over align type 使用 -mavx 编译时元素 SIGSE
- std::make_shared<Type> 会产生内存泄漏
- 使用 std::type T 的数组来构造可从 T 构造的 std::数组
- 在 std::vector<std::vector 中重新存储内部向量<TYPE>>
- 检测<T>某些非数字类型 T 的 std::numeric::type 的特化
- 修复第三方代码:"error: ‘enable_if’ in namespace ‘std’ does not name a template type"
- 错误 C2893 无法专门化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...)'
- 无法专用化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
- 初始化有关Google C 样式指南的静态字符串(C-Type或STD :: String)
- 使用 std::array<Type, N> 的实例作为模板参数
- "The C++ Library doesen't provide a hash for this type." - 在 std::unordered_map 中使用自己的类
- 防止编码器错误 - 忘记在"std::enable_if<>::type"中添加"::type" (SFINAE)
- whats type*在表达式std :: enable_if中
- C++ "using std::<type>" vs 呼叫 std::<type> 每次
- 为什么使用std::type_index而不是std::type _info*