如果我有這樣的模板:
template <typename ... TYPES>
class Visitor {
public:
//virtual void visit(...) {}
};
有沒有辦法讓 C 為串列中的“每種”型別生成虛擬方法?
例如,從概念上講,我想
class A;
class B;
class C;
class MyVisitor : public Visitor<A,B,C>;
要有以下虛方法
virtual void visit(const A&) {}
virtual void visit(const B&) {}
virtual void visit(const C&) {}
uj5u.com熱心網友回復:
Visitor您可以為其中的每個型別添加一個基類模板,為所提供的型別TYPES定義一個visit函式,然后您將從這些基類繼承。那看起來像
template <typename T>
class VisitorBase
{
public:
virtual void visit(const T&) { /* some code */ }
};
template <typename ... TYPES>
class Visitor : public VisitorBase<TYPES>...
{
public:
using VisitorBase<TYPES>::visit...; // import all visit functions into here
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467048.html
