带参数列表的C ++虚方法

时间:2017-10-06 11:48:08

标签: c++ templates parameter-passing

我正在开发用于教育目的的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是否可以成为解决方案,因为我只找到了从中提取单个参数的示例。

0 个答案:

没有答案