#include <iostream>
#include <vector>
using namespace std;
struct VectorCache
{
VectorCache() : instance_counter_(++s_instance_counter_) { }
template<typename T>
std::vector<T>& GetTs()
{
static std::vector<std::vector<T>> tss;
if (tss.size() <= instance_counter_)
tss.resize(instance_counter_);
return tss[instance_counter_];
}
size_t instance_counter_;
static size_t s_instance_counter_;
};
size_t VectorCache::s_instance_counter_;
int main()
{
VectorCache vc1, vc2;
std::vector<int>* pi1 = &vc1.GetTs<int>();
std::vector<float>* pf1 = &vc1.GetTs<float>();
std::vector<int>* pi2 = &vc2.GetTs<int>();
std::vector<float>* pf2 = &vc2.GetTs<float>();
std::cout << pi1 << ' ' << pf1 << ' ' << pi2 << ' ' << pf2 << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFZlY3RvckNhY2hlCnsKICAgIFZlY3RvckNhY2hlKCkgOiBpbnN0YW5jZV9jb3VudGVyXygrK3NfaW5zdGFuY2VfY291bnRlcl8pIHsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBzdGQ6OnZlY3RvcjxUPiYgR2V0VHMoKQogICAgewogICAgICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxUPj4gdHNzOwogICAgICAgIGlmICh0c3Muc2l6ZSgpIDw9IGluc3RhbmNlX2NvdW50ZXJfKQogICAgICAgICAgICB0c3MucmVzaXplKGluc3RhbmNlX2NvdW50ZXJfKTsKICAgICAgICByZXR1cm4gdHNzW2luc3RhbmNlX2NvdW50ZXJfXTsKICAgIH0KCiAgICBzaXplX3QgaW5zdGFuY2VfY291bnRlcl87CiAgICBzdGF0aWMgc2l6ZV90IHNfaW5zdGFuY2VfY291bnRlcl87Cn07CnNpemVfdCBWZWN0b3JDYWNoZTo6c19pbnN0YW5jZV9jb3VudGVyXzsKCmludCBtYWluKCkKewoJVmVjdG9yQ2FjaGUgdmMxLCB2YzI7CglzdGQ6OnZlY3RvcjxpbnQ+KiBwaTEgPSAmdmMxLkdldFRzPGludD4oKTsKCXN0ZDo6dmVjdG9yPGZsb2F0PiogcGYxID0gJnZjMS5HZXRUczxmbG9hdD4oKTsKCXN0ZDo6dmVjdG9yPGludD4qIHBpMiA9ICZ2YzIuR2V0VHM8aW50PigpOwoJc3RkOjp2ZWN0b3I8ZmxvYXQ+KiBwZjIgPSAmdmMyLkdldFRzPGZsb2F0PigpOwoJc3RkOjpjb3V0IDw8IHBpMSA8PCAnICcgPDwgcGYxIDw8ICcgJyA8PCBwaTIgPDwgJyAnIDw8IHBmMiA8PCAnXG4nOwp9