class Any
{
public:
class WrongTypeException
{
public:
inline WrongTypeException()
{
}
inline ~WrongTypeException()
{
}
};
public:
template <typename T>
inline Any(const T& tValue)
{
m_adValue = new TemplateData<T>(tValue);
}
template <typename T>
inline operator T() const
{
TemplateData<T>* tdRet = dynamic_cast<TemplateData<T>*>(m_adValue);
if(tdRet == NULL)
{
throw WrongTypeException();
}
return tdRet->data();
}
inline ~Any()
{
delete m_adValue;
}
protected:
class AbstractData
{
public:
virtual ~AbstractData()
{
}
protected:
AbstractData()
{
}
};
template <typename T>
class TemplateData : public AbstractData
{
public:
inline TemplateData(const T& tValue)
{
m_ptValue = new T(tValue);
}
inline T data() const
{
return *m_ptValue;
}
inline ~TemplateData()
{
delete m_ptValue;
}
protected:
T *m_ptValue;
};
protected:
AbstractData* m_adValue;
};
При использовании в качестве T непримитивного типа в строке:
TemplateData<T>* tdRet = dynamic_cast<TemplateData<T>*>(m_adValue);
происходит Segmetation fault.
Хотелось бы понять причины и способы устранения.
Благодарю заранее.