当您有一个类型取决于某些约束的成员时,您如何设计多态性。
说我有这个:
template<typename T>
class Base
{
public:
Base() = default;
virtual ~Base() = default;
T member;
};
class DerivedA : public Base<int>
{
public:
DerivedA() {member = 5;}
};
class DerivedB : public Base<float>
{
public:
DerivedB() = default;
};
我希望能够根据不同的参数创建一个新的派生对象,即:
Base *b;
if (something)
b = new DerivedA();
else
b = new DerivedB();
显然我不能这样做,因为我需要为b
.
这是糟糕的设计吗?你怎么处理这个?
我可以写一个小包装:
class Wrapper() {};
template<typename T>
class Base : public Wrapper
{
// ...
};
Wrapper a, b;
a = new DerivedA;
b = new DerivedB;
但是我将无法直接访问ormember
中声明的其他方法。我需要强制转换 : ,使多态性变得无用。Base
Derived
reinterpret_cast<DerivedA*>(a)->member
谢谢