#include <iostream>
enum types { INTEGER, DOUBLE, BOOL, STRING };
class Descriptor {
public:
Descriptor(types type):
_type{type}
{}
types &type() { return _type; }
virtual ~Descriptor() = default;
private:
types _type;
};
class Number: public Descriptor {
public:
Number(types descType):
Descriptor(descType)
{}
virtual ~Number() = default;
int intValue;
};
void printValue(Descriptor &t) {
auto cast = dynamic_cast<Number *>(&t);
if (cast == nullptr) {
std::cout << "Err" << std::endl;
} else {
std::cout << "Works" << std::endl;
}
}
int main() {
Number t = Number(INTEGER);
t.intValue = 1;
printValue(t);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKZW51bSB0eXBlcyB7IElOVEVHRVIsIERPVUJMRSwgQk9PTCwgU1RSSU5HIH07CgpjbGFzcyBEZXNjcmlwdG9yIHsKCnB1YmxpYzoKICAgIERlc2NyaXB0b3IodHlwZXMgdHlwZSk6CiAgICAgICAgX3R5cGV7dHlwZX0KICAgIHt9CiAgICB0eXBlcyAmdHlwZSgpIHsgcmV0dXJuIF90eXBlOyB9CgoKICAgIHZpcnR1YWwgfkRlc2NyaXB0b3IoKSA9IGRlZmF1bHQ7Cgpwcml2YXRlOgogICAgdHlwZXMgX3R5cGU7Cn07CgpjbGFzcyBOdW1iZXI6IHB1YmxpYyBEZXNjcmlwdG9yIHsKCnB1YmxpYzoKICAgIE51bWJlcih0eXBlcyBkZXNjVHlwZSk6CiAgICAgICAgRGVzY3JpcHRvcihkZXNjVHlwZSkKICAgIHt9CgogICAgdmlydHVhbCB+TnVtYmVyKCkgPSBkZWZhdWx0OwoKICAgIGludCBpbnRWYWx1ZTsKfTsKCgp2b2lkIHByaW50VmFsdWUoRGVzY3JpcHRvciAmdCkgewoKICBhdXRvIGNhc3QgPSBkeW5hbWljX2Nhc3Q8TnVtYmVyICo+KCZ0KTsKICBpZiAoY2FzdCA9PSBudWxscHRyKSB7CiAgICBzdGQ6OmNvdXQgPDwgIkVyciIgPDwgc3RkOjplbmRsOwogIH0gZWxzZSB7CiAgICBzdGQ6OmNvdXQgPDwgIldvcmtzIiA8PCBzdGQ6OmVuZGw7CiAgfQp9CgoKaW50IG1haW4oKSB7CgogIE51bWJlciB0ID0gIE51bWJlcihJTlRFR0VSKTsKICB0LmludFZhbHVlID0gMTsKCiAgcHJpbnRWYWx1ZSh0KTsKfQo=