如何在构造函数中存储临时状态(需要初始化列表)(在堆栈上)?
例如,实现以下构造函数...
// 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;
};
My attempt:
// 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
}
final
(~=const
)变量,这种灵活性也会扩展到在构造函数中初始化的字段。(仅为澄清:private final int x = localVariableInConstructor.f();
是Java中无法工作的示例。) - Christian Hacklfinally
结构,这个特性在Java中间接地更有意义,而在C++中则不需要由于析构函数。这一切都归结于不同的编程语言是,嗯,不同的... :) - Christian Hackl