#include <iostream>
class Old
{
protected:
long val;
public:
long myVal()
{
return val;
}
void myVal(long val)
{
this->val = val;
}
};
template<typename T> class In: virtual public Old
{
protected:
T value;
public:
void setValue(T val)
{
value = val;
}
T getValue()
{
return value;
}
};
class My: public In<int>, public In<bool>
{
};
int main(int argc, char **argv)
{
My m;
m.myVal(100);
In<int> iv = m;
std::cout << "start_ils: " << m.In<int>::getValue() << std::endl;
std::cout << "start_vs: "<< iv.getValue() << std::endl;
m.In<int>::setValue(10);
std::cout << "=== old's val ===" << std::endl;
std::cout << "old_vs: "<<iv.myVal() << std::endl;
std::cout << "old_ilsi: " << m.In<int>::myVal() << std::endl;
std::cout << "old_ilsb: " << m.In<bool>::myVal() << std::endl;
std::cout << "=== set_ils ===" << std::endl;
std::cout << "get_ils: " << m.In<int>::getValue() << std::endl;
std::cout << "get_vs: "<< iv.getValue() << std::endl;
iv.setValue(10);
std::cout << "=== set_vs ===" << std::endl;
std::cout << "get_ils: " << m.In<int>::getValue() << std::endl;
std::cout << "get_vs: "<< iv.getValue() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgT2xkCnsKICAgIHByb3RlY3RlZDoKICAgICAgICBsb25nIHZhbDsKICAgIHB1YmxpYzoKICAgICAgICBsb25nIG15VmFsKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQoKICAgICAgICB2b2lkIG15VmFsKGxvbmcgdmFsKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+dmFsID0gdmFsOwogICAgICAgIH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEluOiB2aXJ0dWFsIHB1YmxpYyBPbGQKewogICAgcHJvdGVjdGVkOgogICAgICAgIFQgdmFsdWU7CgogICAgcHVibGljOgogICAgICAgIHZvaWQgc2V0VmFsdWUoVCB2YWwpCiAgICAgICAgewogICAgICAgICAgICB2YWx1ZSA9IHZhbDsKICAgICAgICB9CgogICAgICAgIFQgZ2V0VmFsdWUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0KfTsKCgpjbGFzcyBNeTogcHVibGljIEluPGludD4sIHB1YmxpYyBJbjxib29sPgp7Cgp9OwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CiAgICBNeSBtOwogICAgbS5teVZhbCgxMDApOwogICAgSW48aW50PiBpdiA9IG07CiAgICBzdGQ6OmNvdXQgPDwgInN0YXJ0X2lsczogIiA8PCBtLkluPGludD46OmdldFZhbHVlKCkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJzdGFydF92czogIjw8IGl2LmdldFZhbHVlKCkgPDwgc3RkOjplbmRsOwogICAgbS5JbjxpbnQ+OjpzZXRWYWx1ZSgxMCk7CiAgICBzdGQ6OmNvdXQgPDwgIj09PSBvbGQncyB2YWwgPT09IiA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIm9sZF92czogIjw8aXYubXlWYWwoKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIm9sZF9pbHNpOiAiIDw8IG0uSW48aW50Pjo6bXlWYWwoKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIm9sZF9pbHNiOiAiIDw8IG0uSW48Ym9vbD46Om15VmFsKCkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICI9PT0gc2V0X2lscyA9PT0iIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAiZ2V0X2lsczogIiA8PCBtLkluPGludD46OmdldFZhbHVlKCkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJnZXRfdnM6ICI8PCBpdi5nZXRWYWx1ZSgpIDw8IHN0ZDo6ZW5kbDsKICAgIGl2LnNldFZhbHVlKDEwKTsKICAgIHN0ZDo6Y291dCA8PCAiPT09IHNldF92cyA9PT0iIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAiZ2V0X2lsczogIiA8PCBtLkluPGludD46OmdldFZhbHVlKCkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJnZXRfdnM6ICI8PCBpdi5nZXRWYWx1ZSgpIDw8IHN0ZDo6ZW5kbDsKfQ==