试图为具有超过64个成员和BOOST_FUSION_ADAPT_STRUCT宏的巨大结构创建样板代码,但在VS2015 Update 3中无法编译。我尝试使用BOOST_FUSION_HAS_VARIADIC_VECTORBOOST_PP_LIMIT_TUPLE,但是没有运气,如果我不断遇到同样的错误向BOOST_FUSION_ADAPT_STRUCT添加64个以上的成员。除了在C++ 03模式下,没有发现BOOST_FUSION_ADAPT_STRUCT的限制。我想念什么吗?

住在Coliru

码:

#include <boost/fusion/adapted/struct/adapt_struct.hpp>

struct Data
{
    int a01 = 1;
    int a02 = 1;
    int a03 = 1;
    int a04 = 1;
    int a05 = 1;
    int a06 = 1;
    int a07 = 1;
    int a08 = 1;
    int a09 = 1;
    int a10 = 1;
    int a11 = 1;
    int a12 = 1;
    int a13 = 1;
    int a14 = 1;
    int a15 = 1;
    int a16 = 1;
    int a17 = 1;
    int a18 = 1;
    int a19 = 1;
    int a20 = 1;
    int a21 = 1;
    int a22 = 1;
    int a23 = 1;
    int a24 = 1;
    int a25 = 1;
    int a26 = 1;
    int a27 = 1;
    int a28 = 1;
    int a29 = 1;
    int a30 = 1;
    int a31 = 1;
    int a32 = 1;
    int a33 = 1;
    int a34 = 1;
    int a35 = 1;
    int a36 = 1;
    int a37 = 1;
    int a38 = 1;
    int a39 = 1;
    int a40 = 1;
    int a41 = 1;
    int a42 = 1;
    int a43 = 1;
    int a44 = 1;
    int a45 = 1;
    int a46 = 1;
    int a47 = 1;
    int a48 = 1;
    int a49 = 1;
    int a50 = 1;
    int a51 = 1;
    int a52 = 1;
    int a53 = 1;
    int a54 = 1;
    int a55 = 1;
    int a56 = 1;
    int a57 = 1;
    int a58 = 1;
    int a59 = 1;
    int a60 = 1;
    int a61 = 1;
    int a62 = 1;
    int a63 = 1;
    int a64 = 1;
    int a65 = 1;
    int a66 = 1;
    int a67 = 1;
    int a68 = 1;
    int a69 = 1;
    int a70 = 1;
};

BOOST_FUSION_ADAPT_STRUCT(Data, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17,
                          a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36,
                          a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55,
                          a56, a57, a58, a59, a60, a61, a62, a63/*, a64, a65, a66, a67, a68, a69, a70*/) // uncomment the a64 to get the error


int main()
{
    return 0;
}

MSVC错误:



GCC错误:

最佳答案

看来BOOST_FUSION_ADAPT_STRUCT每个类元素都有两个参数,类型和名称。 MSVC仅支持127 macro parameters,而标准推荐255。这说明了为什么需要128个宏参数的第64个元素无法在MSVC++上编译。

07-28 01:04