У меня есть вариант использования, аналогичный этому вопросу < /p>
Я хочу проверить, какой тип переменной экземпляра хранится в параметре без исключения исключения < /p>
class ParameterBase
{
public:
virtual ~ParameterBase() {}
template const T& get() const; //to be implemented after Parameter
template void setValue(const U& rhs); //to be implemented after Parameter
};
template
class Parameter : public ParameterBase
{
public:
Parameter(const T& rhs) :value(rhs) {}
const T& get() const {return value;}
void setValue(const T& rhs) {value=rhs;}
private:
T value;
};
//Here's the trick: dynamic_cast rather than virtual
template const T& ParameterBase::get() const
{ return dynamic_cast(*this).get(); }
template void ParameterBase::setValue(const U& rhs)
{ return dynamic_cast
&>(*this).setValue(rhs); }
class Diagram
{
public:
ParameterBase* v;
int type;
};
< /code>
То, что я хочу сделать, это что -то вроде этого < /p>
if (diagram.getParameter().type == int) {
}
< /code>
Как я могу изменить эту реализацию, чтобы она позволила мне посмотреть, какой тип параметра держит. Все, что мне нужно, это переменная экземпляра класса, которая может быть из нескольких типов (ограниченных), и при чтении ее проверьте, какой тип это
Подробнее здесь: https://stackoverflow.com/questions/640 ... e-variable