如何检查迭代器是否是C 中的output_iterator
How to check if an iterator is an output_iterator in c++?
template<typename Iterator>
void put_value(Iterator pos, int n)
{
static_assert(IsOutputIterator<Iterator>);
//
// How to implement IsOutputIterator?
//
*pos = n;
}
std::iterator_traits<Iterator>::iterator_category
无济于事。例如:vector<int>::iterator
显然是output_iterator
,但是std::iterator_traits<vector<int>::iterator>::iterator_category
将返回random_access_iterator
,这可能不是output_iterator
,例如const_iterator
。
是否有任何可行的方法可以检查迭代器是否是C ?
我的第一个响应是问"输出迭代器?"C 输出迭代器未指定值类型,因为相同的迭代器可能能够输出多种值类型。确定是否可以通过给定迭代器o
编写给定表达式E
的唯一方法是查看*o = std::declval<decltype((E))>()
是否是有效的表达式。
在C 14中,我会定义一个特征:
template <class...> using void_t = void;
template <class, class, class = void>
constexpr bool is_output_iterator = false;
template <class I, class E>
constexpr bool is_output_iterator<I, E, void_t<
typename std::iterator_traits<I>::iterator_category,
decltype(*std::declval<I>() = std::declval<E>())>> = true;
在带有概念的C 中 - 我认为您对此感兴趣,因为您用C 标记了这个问题 - 我会从GitHub中获取示例范围TS实现,然后使用其OutputIterator<I, E>()
概念。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 'Cannot output file filename.exe Permission denied' C++ 代码::块中的错误
- 为什么SQL服务器将值传递给存储过程中的OUTPUT变量?