从mpl-fold表达式中检索迭代器位置
Retrieve iterator position from mpl fold expression
如何使用boost::mpl
(它是某种mpl::set,但不完全是)获得以下折叠类型的索引。value iter::pos::value
不知何故没有定义??
using unique_types =
typename mpl::fold<
mpl::vector<int,double,float,float,float>
, mpl::set0<>
, mpl::insert<mpl::placeholders::_1, mpl::placeholders::_2> /** _1 = State = set<...>, _2 element of NodeTypes*/
>::type;
using iter = typename boost::mpl::find< unique_types , int>::type;
std::cout << iter::pos::value << std::endl; // <<<< Not defined!
在线编译:Coliru
using types = mpl::vector<int, double, float, float, float>
using unique_types<types, mpl::set0<>, mpl::insert<_1, _2>>::type;
using iter = mpl::find<unique_edge_types, int>::type;
// std::cout << iter::pos::value << std::endl;
// error: 'boost::mpl::iter<boost::mpl::s_item<...a lot of text... > >::pos'
// has not been declared (mpl::s_item is a piece of mpl::set implementation)
虽然edge_types是mpl::vector,但unique_edge_types[/strong>是(根据实现详细信息)mpl::set并且mpl::find不适用于mpl:。也出现类似错误
using unique_types = mpl::set<int, double, float>;
using iter = mpl::find<unique_types, int>::type;
// std::cout << iter::pos::value << std::endl;
// error: 'boost::mpl::iter<boost::mpl::set<...a lot of text... > >::pos'
// has not been declared
您可以使用标准函数mpl::unique返回mpl::vector:
#include <boost/mpl/unique.hpp>
#include <boost/type_traits/is_same.hpp>
using unique_types = mpl::unique<types, boost::is_same<_1,_2>>::type;
相关文章:
- 使用迭代器时如何访问对象在向量中的位置?
- 为什么在擦除位置之前的矢量的 c++ 迭代器在 Visual Studio 中也失效
- 为什么后缀失败并且前缀在传递迭代器作为参数并在尾部位置递归时工作正常
- 如何使用regex_token_iterator<std::string::iterator>通过迭代器本身获取子匹配的原始字符串的位置?
- 我们可以安全地依靠迭代器的v.end()位置
- 获取迭代器错误的位置
- 我可以读取向量<string>::迭代器的数字位置吗?
- 获取迭代器在基类型 "intrusive doubly linked list" 的指针字典中的位置
- 迭代器的偏移位置为 std::list
- 从mpl-fold表达式中检索迭代器位置
- 在 65536 位置访问迭代器的指针运算符会导致段错误
- 找到一个位置并返回一个迭代器不起作用
- 如何从 stl 向量中最小元素的迭代器位置获取 int/size_t 值
- 如何在迭代器位置之后插入元素
- 获取 GDB 中字符串中的迭代器位置
- 使用迭代器位置的线性和二叉搜索
- C++映射从迭代器位置开始搜索
- 按迭代器位置进行矢量擦除
- std::list 的 end() 迭代器位置在擦除时会改变吗?
- std::map<t1, t2>::erase(迭代器位置)的工作?