0
#include <boost/range/adaptors.hpp>
#include <boost/assign.hpp>
#include <iostream>
using namespace boost::adaptors;
using namespace boost::assign;

template<int N>
struct factorial
{
    enum {
        value = N * factorial<N-1>::value
    };
};

template<>
struct factorial<0>
{
    enum {
        value = 1
    };

};

int main()
{
    typedef std::map<uint64_t, std::string> map_type;

    map_type const map_obj = {
        { 0x0000000000000401, "one"   },
        { 0x0000000000000002, "two"   },
        { 0x0000000000000003, "three" },
        { 0x0000000000000404, "four"  },
        { 0x0000000000000005, "five"  },
    };

    const int mask_value = 0x000000000000FF00;

    auto func = [](const map_type::value_type& p)
                    {
                        std::cout << " value_type.second: " << p.second << "\n";
                        return (p.first & mask_value) != 0;
                    };

    for(const auto&v : map_obj | filtered(func) | map_values)
    {
        std::cout << " Got: " << v <<"\n" ;
    }
    std::cout << " 5!: " << factorial<5>::value << "\n";
}

上記のコード例は Xcode でコンパイルするために使用されますが、Xcode 6.3 では、main 関数の先頭にある map obj の初期化子リストをコンパイルできません。ブースト ヘッダーに不満はありません。なんで?

4

1 に答える 1

0

エラーはリンク時エラーでした。私のブーストは libstdc++ を使用せずに libc++ を使用してビルドされました。ライブラリの切り替えが機能しました。

于 2015-04-19T16:55:59.523 に答える