C++ 初始值设定项列表中的超大数组

C++ 初始值设定项列表中的超大数组,c++,list-initialization,C++,List Initialization,我需要将大型转换表初始化为类中的数据成员: CFoo::CFoo() : member_one(123), member_two(456), member_large_table({ {"huge", "2D"}, {"array", "of"}, {"data", "..."}, ..... 这

我需要将大型转换表初始化为类中的数据成员:

CFoo::CFoo() :
    member_one(123),
    member_two(456),
    member_large_table({
       {"huge", "2D"},
       {"array", "of"},
       {"data", "..."},
       .....

这样做的好做法是什么?将其放置在初始化数组中会增加编译时错误检查,但会使构造函数的代码膨胀。如何分离此代码?

表格
成为
成员(大)表格
的类型。然后您可以执行以下操作:

class CFoo {
    static auto make_member_large_table() -> table_t {
        return table_t{{"huge", "2D"},{"array", "of"},{"data", "..."},...};
    }
public: 
    CFoo::CFoo() :
        member_one(123),
        member_two(456),
        member_large_table(make_member_large_table())
    {}
};

由于返回值优化,这将直接在成员变量中创建表,并且不会发生复制或移动。

table\u t
成为
member\u large\u table
的类型。然后您可以执行以下操作:

class CFoo {
    static auto make_member_large_table() -> table_t {
        return table_t{{"huge", "2D"},{"array", "of"},{"data", "..."},...};
    }
public: 
    CFoo::CFoo() :
        member_one(123),
        member_two(456),
        member_large_table(make_member_large_table())
    {}
};

由于返回值优化,这将直接在成员变量中创建表,不会发生复制或移动。

编译错误是什么?是因为.cpp文件太大了吗?我认为C++编译器对CPP文件大小有很大限制。你可以考虑添加一个工厂函数,并在initlalizer列表中调用它。您希望什么代码比构造函数更臃肿?为什么改为膨胀会更好?@n314159
member\u large\u table
是类,它在构造函数中接受数组。也许最好将其称为“CSomeConverter”Create
make\u large\u table
函数?所以你把代码移到别处。你的编译错误是什么?是因为.cpp文件太大了吗?我认为C++编译器对CPP文件大小有很大限制。你可以考虑添加一个工厂函数,并在initlalizer列表中调用它。您希望什么代码比构造函数更臃肿?为什么改为膨胀会更好?@n314159
member\u large\u table
是类,它在构造函数中接受数组。也许最好将其称为“CSomeConverter”Create
make\u large\u table
函数?所以你把代码移到别处。