有关使用MPL :: range_c与mpl :: fold使用的问题

发布于 2025-02-02 22:26:48 字数 1118 浏览 3 评论 0原文

我有以下简单功能来转换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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文