mpl::vector在执行a之后,是否有可能到达a的偏移量mpl::find<seq,type>?
mpl::vector
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硬编码的,如果可能的话,我想避免这种情况。
type_trait<T>::ordinal
重要说明 ,我也在boost::variant向量中创建a ,我看到可以通过执行运行时函数来达到序数variant::which()。但是,这需要我创建一个具有默认初始化值的虚拟对象。这是非常困难的。如果您知道使用variant完成此操作的其他方式,那也将是我的问题的解决方案。
boost::variant
variant::which()
如果您正在寻找一种indexOf功能,我想Boost.MPL文档中涉及的示例find将达到目的:
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 );