【问题标题】:boost mpl count for simple example举个简单的例子来提升 mpl 计数
【发布时间】:2016-11-20 13:13:11
【问题描述】:

我正在尝试学习 boost mpl,尝试了一个非常简单的示例来计算一个类型在 mpl map 中出现的次数。有人可以解释为什么这个程序的输出是 0

typedef map<
            pair<int, unsigned>
            , pair<char, unsigned char>
            , pair<long_<5>, char[17]>
            , pair<int[42], bool>
            > m;


    std::cout << mpl::count <
                            m,
                            mpl::key_type
                                    <
                                    m,
                                    pair<int, unsigned>
                                    >::type
                            >::type::value << std::endl;

【问题讨论】:

    标签: templates boost-mpl


    【解决方案1】:

    根据你想计算类型出现次数的代码中写的内容

    key_type<
        m,
        pair<int, unsigned>
    >::type
    

    在您的地图中。最后这是一个int,因为在 mpl::key_type 的描述中你会发现:

    key_type<m,x>::type          Identical to x::first;
    

    那么,让我们看看您的地图的实际内容是什么。 我可以只写地图的类型,但我想向您展示如何快速而懒惰地检查类型。 :P

    所以,我们只是让编译器看不到地图的类型。 我在某处添加了这一行:

    typename m::blaa BB;
    

    编译当然会失败(因为blaa 不是mpl::map 类型的元素)并显示以下错误消息:

     error: 'blaa' in 'm {aka struct boost::mpl::map<boost::mpl::pair<int, unsigned int>, boost::mpl::pair<char, unsigned char>, boost::mpl::pair<mpl_::long_<5l>, char [17]>, boost::mpl::pair<int [42], bool> >}' does not name a type
    

    好的,我们可以看到地图包含一个配对列表(例如,boost::mpl::pair&lt;int, unsigned int&gt;), 但没有int。在您的mpl::count 电话中,您正在寻找int

    只需尝试将您的 std::cout 行替换为 以下几行,您会看到结果将如预期的那样。

    std::cout << 
        boost::mpl::count< m, 
            boost::mpl::pair<int, unsigned> 
        >::type::value 
    << std::endl;
    

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      相关资源
      最近更新 更多