gpt4 book ai didi

C++ 构造函数 : Initialize local variable before initializer list

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:49 26 4
gpt4 key购买 nike

如何在构造函数中(在堆栈上)存储初始化列表所需的临时状态?

例如,实现这个构造函数……

// configabstraction.h
#include <istream>

class ConfigAbstraction
{
public:
ConfigAbstraction(std::istream& input);

private:
int m_x;
int m_y;
int m_z;
};

...使用这样的有状态助手类?

// mysillyparserdontworry.h
#include <json/reader.h> //jsoncpp

class MySillyParserDontWorry
{
public:
MySillyParserDontWorry(std::istream& input) { input >> m_parseTree; }
int intByName(const char* name) const { return m_parseTree[name].asInt(); }

private:
Json::Value m_parseTree;
};

我的尝试:

// configabstraction.cpp

ConfigAbstraction::ConfigAbstraction(std::istream& input)
: local_parserState(input) // init local variable first: Not possible!
, m_a(local_parserState.intByName("a"))
, m_b(local_parserState.intByName("b"))
, m_c(local_parserState.intByName("c"))
{
MySillyParserDontWorry local_parserState; // ...because it is local
}

最佳答案

在 C++11 中,您可以通过委托(delegate)构造函数解决此问题:

class ConfigAbstraction
{
public:
ConfigAbstraction(std::istream& input);

private:
ConfigAbstraction(const MySillyParserDontWorry& parser);

int m_a;
int m_b;
int m_c;
};

ConfigAbstraction::ConfigAbstraction(const MySillyParserDontWorry& parser)
: m_a{parser.intByName("a")}
, m_b{parser.intByName("b")}
, m_c{parser.intByName("c")}
{
}

ConfigAbstraction::ConfigAbstraction(std::istream& input)
: ConfigAbstraction{MySillyParserDontWorry{input}}
{
}

关于C++ 构造函数 : Initialize local variable before initializer list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com