如何从父类访问模板子方法

时间:2017-12-10 19:20:51

标签: c++ class templates inheritance casting

我有以下基类

//ALL possible types could be used in my project (ROOT CERN's types)
using var_t = std::variant <Bool_t, Char_t, Double_t, Float_t, Int_t, UInt_t, TString>;

class Base
{
    public :
        virtual ~Base();
        virtual void Print() const = 0;

        var_t GetValueFromChild() const;
};

GetValueFromChild应该访问模板子类方法:

template< typename T >
class Child : public Base
{
    protected :
        const T* value;
    public :
        Child( const T* value ) : value( value ) { }
        ~Child() { }
        T GetValue() const { return *value; }
        void Print() const { std::cout << *value << "\n"; }
};

问题是我不知道如何定义GetValueFromChild。我尝试这种方法:

var_t  Base::GetValueFromChild() const
{
    if ( Child* ch = dynamic_cast<Child* >( this ) )
    {
        return ch->GetValue();
    }
    else{ return /*smth*/ }
}

但是我收到以下错误:

  

使用类模板'TypedVariable'需要模板参数       if(Child * ch = dynamic_cast(this))

那个(或那些)论点应该是什么?

0 个答案:

没有答案