我正在与成员A
一起编写m
类。
我希望成员变量具有默认的(派生的)类型,但可以选择在类构造函数中将其更改为另一种(派生的)类型。
像
// A.h
class A
{
DefaultType m {0};
};
// A.cpp
A::A()
{
// if this is present, change m
m = OtherType(1., 2.);
// otherwise, leave as default
}
对不起,我第一次不清楚,试图简化问题,可能使它难以理解。
上下文是我将A
的构造函数暴露给用户,该用户应该编写该构造函数,编译代码并运行它。 A
的其余实现位于单独的文件中,用户不可访问。在那里定义的A
的某些成员函数将需要访问m.fun()
,这是DefaultType
和OtherType
的常用方法。
所以约束是我希望构造函数中的语法尽可能简单。
如果用户编写了构造函数,而只是忽略了m
的(重新)定义,则程序将只认为它是默认类型,并使用该类中的.fun()
。否则,m
将是OtherType
,.fun()
将从那里来。
此外,还有大约10个其他成员,例如m
。
我想知道这样的事情是否可行,还是我不得不重新考虑整个设计。
答案 0 :(得分:0)
您可以这样做:
class Base
{
virtual ~Base() {}
};
class DefaultType : public Base
{
};
class OtherType : public Base
{
};
class A
{
public:
A(bool use_default = true)
{
if (use_default)
m.reset(new DefaultType());
else
m.reset(new OtherType());
}
std::unique_ptr<Base> m;
};