另一个模板虚函数的用例

时间:2013-06-18 19:39:34

标签: c++ templates virtual-functions

我正在尝试实现类似于访问者模式的内容。

以下不是完整的代码,所以你可能想知道代码的动机,但你可以得到与问题相关的结构。

我有以下内容:

class base
{
public:
    GetValue(int &val);
    GetValue(char &val);
    GetValue(vector<double> &val);

    virtual accept(baseVisitor* p){};

};

template <typename T>
Derived1 : public Base
{

public:
    GetValue(T &val);
    virtual accept(baseVisitor* p)
    {
        p->visitDerived1();
    }

private:
    T m_val;
};

Derived2 : public Base
{
    GetValue(int &val);
    virtual accept(baseVisitor* p)
    {       
        p->visitDerived2();
    }
private:
    int m_val;
};


class baseVisitor
{
    virtual visitDerived1(Base* p);
    virtual visitDerived2(Base* p);
}

class DerivedVisitor
{
    virtual visitDerived1(Base* p)
    {
        //Do something with m_val
    }

    virtual visitDerived2(Base* p)
    {
        //Do something with m_val
    }
}

visitDerived2的实施非常简单。我需要使用int参数调用GetValue,然后对其执行某些操作。如果允许虚拟模板功能,我应该对visitDerived1做同样的事情,那么我会做以下事情:

template <typename T>
virtual visitDerived1(Base* p)
{
        T val ;
        GetValue(val);
        //Do something with m_val
}

但模板虚函数无法编译。

我总体上看到了一些解决这个问题的方法,但似乎没有一个适合我的情况。

您对此有何建议?

0 个答案:

没有答案