在标题中,我有
class CSomeClass
{
const GUID m_guid;
public:
CSomeClass();
///...
}
并在源文件中
CSomeClass::CSomeClass()
, m_guid(
[]() {
GUID g;
::CoCreateGuid(&g);
return g;
}()
)
{
}
如您所知,Guids 可以用作不需更改的标识。鉴于 ::CocreateGuid()
函数提供了我想要的输出参数,而不是返回它,我不能直接使用对该函数的简单调用来初始化 m_guid 成员字段(即常量)。
因此,其常量性的结果是它必须在初始化程序列表中的左括号之前初始化,因此不能简单地通过调用构造函数中的 ::CocreateGuid()
进行分配 body 。
有没有比这个 lambda 表达式更简单的初始化方法?
最佳答案
当 lambda 表达式正确时,我将使用辅助函数:
GUID create_guid()
{
GUID g;
::CoCreateGuid(&g);
return g;
}
CSomeClass::CSomeClass() : m_guid(create_guid()) {}
此外,create_guid()
本身具有含义并且可以重用(即使将其作为实现细节是可能/正确的)。
关于c++ - 对于使用输出参数函数来初始化 const 成员的构造函数中的调用,代码比 lambda 更简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31078201/