我想要一个可变参数模板类(用N
模板参数说明)来定义N
成员函数,每个成员函数从参数列表中获取一个类型的参数。我试过这个:
template<class Derived, class... DerivedOthers>
class VtfVisitor : public VtfVisitor<DerivedOthers...>
{
public:
virtual void visit(Derived& derived) = 0;
};
template<class Derived>
class VtfVisitor
{
public:
virtual void visit(Derived& derived) = 0;
};
哪个不起作用,因为我无法重新定义模板类。然后我尝试了Bo提出的解决方案:
template<class Derived, class... DerivedOthers>
class VtfVisitor : public VtfVisitor<DerivedOthers...>
{
public:
virtual void visit(Derived& derived) VISITOR_CVQ = 0;
};
template<class Derived>
class VtfVisitor<Derived>
{
public:
virtual void visit(Derived& derived) VISITOR_CVQ = 0;
};
哪个仍然不起作用:使用VtfVisitor<D1,D2>
尝试此操作时,成员函数visit(D2&)
未在instanciated模板类中定义(visit(D1&)
已明确定义)。
我怎样才能让它按预期工作?
感谢您的帮助。
答案 0 :(得分:2)
您需要将省略号放在模板参数列表之外:
template<class Derived, class... DerivedOthers>
class VtfVisitor : public VtfVisitor<DerivedOthers>...
{
public:
virtual void visit(Derived& derived) = 0;
};
例如,如果DerivedOthers...
为{int, char, float}
,您将获得以下扩展:
class VtfVisitor : public VtfVisitor<char>, VtfVisitor<float>
{
public:
virtual void visit(int& derived) = 0;
};
答案 1 :(得分:1)
编译器认为您正在使用不同数量的参数重新声明相同的类。
要为单个参数案例创建专门化,您必须在类名后指定:
x509.py