4

mpl::vector在对它执行 a 之后是否有可能获得 a 的偏移量mpl::find<seq,type>

换句话说,我想做的编译时间等同于:

#include <vector>
#include <algorithm>
#include <iostream>

int main()
{
  typedef std::vector<int> v_type;
  v_type v_int(3);

  v_int[0] = 1;
  v_int[1] = 2;
  v_int[2] = 3;

  v_type::iterator it= std::find(  v_int.begin() ,v_int.end(),3);

  std::cout << it - v_int.begin() << std::endl;
}

如果做不到这一点,我的类型mpl::vector有一个type_trait<T>::ordinalconst 硬编码,如果可能的话,我想避免这种情况。

重要说明,我也在boost::variant从向量创建一个,我看到我可以通过执行运行时函数来获得序数variant::which()。但是,这需要我创建一个具有默认初始化值的虚拟对象。这是相当难看的。如果您知道其他使用变体的方法,那也可以解决我的问题。

4

2 回答 2

3

如果您正在寻找的是一种 indexOf 功能,我想 Boost.MPL doc 中的示例find可以解决问题:

typedef vector<char,int,unsigned,long,unsigned long> types;
typedef find<types,unsigned>::type iter;

BOOST_MPL_ASSERT(( is_same< deref<iter>::type, unsigned > ));
BOOST_MPL_ASSERT_RELATION( iter::pos::value, ==, 2 );
于 2011-05-18T11:47:24.117 回答
1

它们是迭代器类别中的一个元函数来做到这一点,它被称为距离

ps,很抱歉这么快回答我自己的问题。我只是偶然发现了解决方案。

于 2011-05-18T11:45:35.867 回答