我喜欢新的自动生成的大括号括起来的初始化器!
如果我开始声明自己的构造函数,有什么办法可以避免丢失它们?
代码
#include <string>
struct Foo
{
int i;
std::string s;
// Foo() { } // I lose my brace-enclosed initializers if I uncomment this line
};
int
main( int argc, char* argv[] )
{
Foo f{ 1, "bar" }; // having the option to do this is good
return 0;
}
回答
根据下面 juanchopanza 的回答,看来我必须满足聚合的冗长规则。但我仍然需要一个可以应用于 50 多个 ORM 类(每个类有 5-15 个字段)的解决方案,不需要大量的样板代码,或者如果有样板代码,至少应该易于编辑/维护。
我能得到的最接近的是这个使用组合的解决方案。我想知道是否有更好/更简单的东西......
#include <string>
// this class must satisfy the rules for aggregates
struct Foo_
{
int i;
std::string s;
};
// this class can be anything...
struct Foo
{
Foo_ m_f;
Foo( Foo_ const& f ) : m_f( f ) { }
};
int
main( int argc, char* argv[] )
{
Foo f( { 1, "bar" } ); // ugly, but works
return 0;
}