MPL pos 是一个未记录的元函数吗?

2024-04-11

里面有下面的示例代码BOOST MPL 文档find算法 http://www.boost.org/doc/libs/1_46_1/libs/mpl/doc/refmanual/find.html:

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;
}

将类型信息与值本身一起存储到文件中。

EDIT

感谢 Potatoswatter 的回答,这个解决方案似乎有效:

template <typename S, typename T>
struct pos : distance< typename begin<S>::type, typename find<S, T>::type >
{};

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

元函数看起来像fn< iter >::value。这只是迭代器类型的成员。

直观上,我会说该成员特定于由以下结果产生的迭代器:find或类似的功能。无论如何,正如你所说,它是无证的。不要假设每个迭代器都有一个pos member.

The distance元函数应该提供此功能,尽管它可能会更慢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPL pos 是一个未记录的元函数吗? 的相关文章

随机推荐