我有一个类,它将解析XML文件并根据内容和使用的方法返回数据。我希望能够使用带路径的文件名或指向已打开文件的指针来启动对象。
如果给出了一个已打开文件的指针,那么它运行构造函数就可以了。如果传递了文件名,那么该构造函数将打开该文件,然后将该地址传递给打开的文件到第二个构造函数。
> totals = Hash.new { |hash, key| hash[key] = { dollar: 0 } }
> totals[:foo][:dollar] += 50
> totals
=> { :foo => { :dollar => 50 } }
> totals[:foo][:dollar] += 50
> totals[:bar][:dollar] += 10
> totals
=> { :foo => { :dollar => 100 }, :bar => { :dollar => 10 } }
这是我对如何做到这一点的第一个想法,但我觉得我过度复杂化了这个问题。这是一种做得好的方法,它是否理智并且是否存在这种情况的最佳实践?
答案 0 :(得分:2)
在C++11
中delegating constructors可以提供帮助。
如果C++11
不是一个选项,请重构您的代码,以便私有"初始化"执行繁重的函数并从每个构造函数调用它。
class foo
{
public:
foo(const QString fileName) { /* open QFile, call load() */ }
foo(QFile *fp) { load(fp); }
...
private:
void load(QFile* fp);
};