#include <iostream>
#include <vector>
namespace problem {
class storage {
struct data_base {};
template <class K>
struct data: data_base {
data(const K& v): value_(v) {}
K value_;
};
typedef std::vector<data_base*> container_type;
public:
~storage() {
while(!this->VData.empty()) {
delete this->VData.back();
this->VData.pop_back();
}
}
template <class P>
inline void push(P v) {
this->VData.push_back(new data<P>(v));
}
template <class P>
P &get(int i) {
return static_cast<data<P>*>(this->VData[i])->value_;
}
private:
container_type VData;
};
}
int main() {
problem::storage testStorage;
testStorage.push(256);
testStorage.push(3.4);
std::cout << testStorage.get<int>(0) << std::endl;
std::cout << testStorage.get<double>(1) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKbmFtZXNwYWNlIHByb2JsZW0gewpjbGFzcyBzdG9yYWdlIHsKICAgIHN0cnVjdCBkYXRhX2Jhc2Uge307CiAgICAKICAgIHRlbXBsYXRlIDxjbGFzcyBLPiAKICAgIHN0cnVjdCBkYXRhOiBkYXRhX2Jhc2UgewogICAgICAgIGRhdGEoY29uc3QgSyYgdik6IHZhbHVlXyh2KSB7fQogICAgICAgIEsgdmFsdWVfOwogICAgfTsKICAgIAogICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxkYXRhX2Jhc2UqPiBjb250YWluZXJfdHlwZTsKICAgIApwdWJsaWM6CiAgICB+c3RvcmFnZSgpIHsKICAgICAgICB3aGlsZSghdGhpcy0+VkRhdGEuZW1wdHkoKSkgewogICAgICAgICAgICBkZWxldGUgdGhpcy0+VkRhdGEuYmFjaygpOwogICAgICAgICAgICB0aGlzLT5WRGF0YS5wb3BfYmFjaygpOwogICAgICAgIH0KICAgIH0KICAgIHRlbXBsYXRlIDxjbGFzcyBQPgogICAgaW5saW5lIHZvaWQgcHVzaChQIHYpIHsKICAgICAgICB0aGlzLT5WRGF0YS5wdXNoX2JhY2sobmV3IGRhdGE8UD4odikpOwogICAgfQogICAgdGVtcGxhdGUgPGNsYXNzIFA+CiAgICBQICZnZXQoaW50IGkpIHsgCiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRhdGE8UD4qPih0aGlzLT5WRGF0YVtpXSktPnZhbHVlXzsgCiAgICB9CnByaXZhdGU6CiAgICBjb250YWluZXJfdHlwZSBWRGF0YTsKfTsKfQoKaW50IG1haW4oKSB7CiAgICBwcm9ibGVtOjpzdG9yYWdlIHRlc3RTdG9yYWdlOwogICAgdGVzdFN0b3JhZ2UucHVzaCgyNTYpOwogICAgdGVzdFN0b3JhZ2UucHVzaCgzLjQpOwoKICAgIHN0ZDo6Y291dCA8PCB0ZXN0U3RvcmFnZS5nZXQ8aW50PigwKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgdGVzdFN0b3JhZ2UuZ2V0PGRvdWJsZT4oMSkgPDwgc3RkOjplbmRsOwp9