我試圖設計一個工廠類,允許我用任意數量的構造函數封裝任何類的構造(已從相同的基類「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」到variadic,讓我瘋狂 – jms
不應該在基類中使用':FactoryBase(id){}':'id_(id)'? – 0x499602D2