gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:07:13 25 4
gpt4 key购买 nike

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;

最佳答案

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

直觉上,我会说成员特定于由 find 产生的迭代器或类似的功能。无论如何,正如您所说,它没有记录。不要假设每个迭代器都有一个 pos成员(member)。

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

关于c++ - MPL pos 是一个未记录的元函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5666394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com