모든 클래스 생성자 (동일한 기본 클래스 "Base"에서 파생 됨)의 생성자를 생성자 수와 함께 캡슐화 할 수있는 팩토리 클래스를 설계하려고합니다. 인수. 현재의 디자인은 하나 개 또는 제로 생성자 인수를 지원합니다생성자에 대한 가변 템플릿 인수가있는 팩토리 클래스
class FactoryBase
{
public:
FactoryBase(std::string id) : id_(id) {}
virtual ~FactoryBase(){}
virtual Base* create() const = 0;
std::string getId() const { return id_; }
protected:
std::string id_;
};
template<class T, typename A> //One argument
class Factory : public FactoryBase
{
public:
Factory(std::string id, A arg) : FactoryBase(id), arg_(arg) {}
Base* create() const { return new T(arg_); }
private:
A arg_;
};
template<class T> //zero arguments/default ctor
class Factory<T,void> : public FactoryBase
{
public:
Factory(std::string id) : FactoryBase(id) {}
Base* create() const { return new T(); }
};
난 그냥 인수의 각 번호에 대해 하나의 템플릿 특수화를 추가 할 수 있습니다,하지만 나는 그것을 "porperly"하는 방법을 알고 싶습니다.
돌아왔다! :-) – 0x499602D2
그래, "variadric"을 가변적으로 고칠 수 없어서 나를 미치게했다. – jms
기본 클래스의 FactoryBase (id) {}'는': id_ (id)'가 아니겠습니까? – 0x499602D2