c++ 有没有简单的方法来初始化一个简单的类没有构造函数?

我有一个非常简单的类,像这样:

class MySimpleClass
{
public:
    uint16_t   m_myInt;
    String     m_myString;
    String     m_myOtherString;
    MyEnum     m_myEnumValue;
    bool       m_myBool;
};

这个类是预编译库的一部分,我不能更改,它不提供构造函数。有没有任何方式,我可以初始化这个类,而不必这样做这样的事情…

MySimpleClass msc;
msc.m_myInt = 1;
msc.m_myString = "foo";
msc.m_myOtherString = "bar";
msc.m_myEnumValue = ENUM_VALUE_YES;
msc.m_myBool = true;

我不厌恶这样做,但我很好奇知道是否有某种初始化语法,会做到吗?

我在C 03工作,但在C 11的答案也将感兴趣。

最佳答案
您可以添加一个可用作构造函数的自由函数:

MySimpleClass make_msc(
    uint16_t myInt,
    String myString,
    String myOtherString,
    MyEnum myEnumValue,
    bool myBool)
{
    MySimpleClass msc;
    msc.m_myInt = myInt;
    msc.m_myString = myString;
    msc.m_myOtherString = myOtherString;
    msc.m_myEnumValue = myEnumValue;
    msc.m_myBool = myBool;
    return msc;
}

//Usage:
MySimpleClass msc = make_msc(1,"foo","bar",ENUM_VALUE_YES,true);

或者,您可以使用聚合初始化:

MySimpleClass msc = {1,"foo","bar",ENUM_VALUE_YES,true};//C++03 or C++11
MySimpleClass msc{1,"foo","bar",ENUM_VALUE_YES,true}; //C++11 only

注意:

MySimpleClass msc = {1,"foo","bar",ENUM_VALUE_YES,true};

form只能在声明中使用,但是:

MySimpleClass{1,"foo","bar",ENUM_VALUE_YES,true}
make_msc(1,"foo","bar",ENUM_VALUE_YES,true)

表单可以在任何期望MySimpleClass的表达式中使用。

转载注明原文:c++ 有没有简单的方法来初始化一个简单的类没有构造函数? - 代码日志