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