我正在开发用于教育目的的C ++ HTTP实现,我有以下类。
Header
:表示HeaderFields池
HeaderField
:表示一个HeaderField(名称 - 值对)
因为许多标题的值中有多个相关值(例如“Content-Type:text / plain; charset = utf-8”包含charset旁边的实际内容类型,这是一个附加信息)我想到了我的HeaderField-Class作为基类,因此我可以拥有一个ContentType-Class,例如从HeaderField派生并且只能处理Content-Type-Fields。 因为我不能在HTTP协议中维护所有可能的Header-Fields,所以我需要让它变得动态。这意味着,我想注册可以处理某种类型的HeaderField的类,如果解析了这样的HeaderField,它应该是已注册类的多态对象。
我找到了一些存储classtype here的解决方案。
问题在于allocate()
- 方法:
我认为将Type
- 和TypeImpl
- Class作为通用类并不仅仅是为了这个目的而感到高兴。因此我需要在allocate()
- 方法中有一个Argument-List,因为一些构造函数可能需要传入一些参数......
这是我试过的:
class Type {
public:
virtual ~Type() {};
template<typename... Args>
virtual void* allocate(Args... args)const = 0;
...
}
template<typename T>
class TypeImpl :public Type {
public:
template<typename... Args>
void* allocate(Args... args)const {
return new T(args...);
}
...
}
这会在VS2015中引发编译错误C2898
。
有没有人为此做过工作?
PS:我不确定va_list
是否可以成为解决方案,因为我只找到了从中提取单个参数的示例。