我有类似
的东西struct Foo {
const double a;
const double b;
Foo(double c);
}
Foo::Foo(double c) {
double tmp = f(c);
a = g(tmp);
b = h(tmp);
}
其中f,g,h
是在别处实现的功能。这给出了预期的"未初始化的const成员"错误。
我可以用
修复它Foo::Foo(double c): a (g(f(c))), b (h(f(c))) {}
但是f
是一项昂贵的功能,我不想再运行两次。
我的问题是,如何在不运行f
两次或让tmp
成为Foo
的常任成员的情况下解决此问题?
答案 0 :(得分:7)
通常,委托构造函数为这类问题提供了一种简单的解决方案。在这种情况下,您必须介绍一些区分两个构造函数的方法:
private:
// the int param is unused
Foo(double fc, int) : a(g(fc)), b(h(fc)) {}
public:
Foo(double c) : Foo(f(c), 0) {}