BOOST MPL documentation of the find
algorithm中有以下示例代码:
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;
答案 0 :(得分:4)
元功能看起来像fn< iter >::value
。这只是迭代器类型的一个成员。
从本质上讲,我会说该成员特定于find
或类似函数产生的迭代器。无论如何,正如你所说,它是无证的。不要假设每个迭代器都有pos
成员。
distance
元函数应提供此功能,但可能会更慢。