MPL pos是未记录的元功能吗?

问题描述

|
find
算法的BOOST MPL文档中包含以下示例代码
typedef vector<char,int,unsigned,long,unsigned long> types;
typedef find<types,unsigned>::type iter;
...
BOOST_MPL_ASSERT_RELATION( iter::pos::value,==,2 );
但是,我找不到迭代器的
pos
函数的文档。我可以可靠地使用它吗? 我想以某种方式使用它:
typedef vector<type1,type2,type3> types;

template <typename T>
void File::write(T value) {
    BOOST_MPL_ASSERT((contains<types,T>));
    unsigned typeID = find<types,T>::type::pos::value;
    fstr << typeID << value;
}
将类型信息与值本身一起存储到文件中。 编辑 感谢Potatoswatter的回答,此解决方案似乎有效:
template <typename S,typename T>
struct pos : distance< typename begin<S>::type,typename find<S,T>::type >
{};

...
    unsigned typeID = pos<types,T>::value;
    

解决方法

元功能看起来像“ 5”。那只是迭代器类型的成员。 从本质上讲,我想说该成员特定于ѭ0或类似函数所产生的迭代器。就像您说的,无论如何,它是无证的。不要假定每个迭代器都有一个
pos
成员。
distance
元功能应提供此功能,尽管可能会慢一些。