有关使用MPL :: range_c与mpl :: fold使用的问题
我有以下简单功能来转换MPL :: vector< ...>打包< ...>
namespace mpl = boost::mpl;
template <typename... Ts>
struct pack{};
struct A{};
struct B{};
template <typename... P>
struct mp_append_impl;
template <template <typename...> typename P, typename... Ts, typename T>
struct mp_append_impl<P<Ts...>, T>
{
using type = P<Ts..., T>;
};
template <template <typename...> typename P, typename T>
struct mp_append_impl<P<void>, T>
{
using type = P<T>;
};
template <typename S>
struct mpl_to_pack
{
using SEQ = mpl::range_c<int, 0, mpl::size<S>::type::value>;
using type =
typename mpl::fold<SEQ, pack<void>, mp_append_impl<mpl::_1, typename mpl::at<S, mpl::_2>::type>>::type;
};
void main() {
std::cout << std::endl
<< boost::typeindex::type_id<mpl_to_pack<mpl::vector<A, B>>::type>().pretty_name() << std::endl;
}
}
为什么此功能输出pack&lt; mpl _ :: void_,mpl _ :: void_&gt;而不是pack&lt; a,b&gt;?
i have below simple function to convert a mpl::vector<...> to pack<...>
namespace mpl = boost::mpl;
template <typename... Ts>
struct pack{};
struct A{};
struct B{};
template <typename... P>
struct mp_append_impl;
template <template <typename...> typename P, typename... Ts, typename T>
struct mp_append_impl<P<Ts...>, T>
{
using type = P<Ts..., T>;
};
template <template <typename...> typename P, typename T>
struct mp_append_impl<P<void>, T>
{
using type = P<T>;
};
template <typename S>
struct mpl_to_pack
{
using SEQ = mpl::range_c<int, 0, mpl::size<S>::type::value>;
using type =
typename mpl::fold<SEQ, pack<void>, mp_append_impl<mpl::_1, typename mpl::at<S, mpl::_2>::type>>::type;
};
void main() {
std::cout << std::endl
<< boost::typeindex::type_id<mpl_to_pack<mpl::vector<A, B>>::type>().pretty_name() << std::endl;
}
}
why this function output pack<mpl_::void_, mpl_::void_> instead of pack<A, B>?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论