일부 제약 조건에 따라 유형이 다른 멤버가있을 때 어떻게 다형성을 디자인합니까? 다형성 디자인, 추상 클래스로 템플릿
내가이이 말 : 나는 다른 매개 변수에 따라 새로운 파생 된 개체, 즉 생성 할 수 있도록하려면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;
을하지만 내가 Base
또는 Derived
에 선언 member
또는 다른 방법에 직접 액세스 할 수 없습니다. 나는 캐스팅해야한다 : reinterpret_cast<DerivedA*>(a)->member
, 다형성을 쓸모 없게 만든다.
감사합니다.
디자인에 문제가 있습니다 ... 래퍼 인터페이스는 정상 상태 여야하지만 작동하려면 문제를 되돌려 야합니다. – Synxis
이것은 내 마음에 온다 http://en.wikipedia.org/wiki/Policy-based_design – user1849534
세 번째 수준의 기초? –