我有以下基类
//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))
那个(或那些)论点应该是什么?