#include <iostream>
using namespace std;
using std::cout;
using std::endl;
class Container1
{
public:
Container1() :name ("Cont1")
{};
string name;
// implementation here
};
class Container2
{
public:
Container2() :name ("Cont2") {};
string name;
// implementation here
};
template<typename ContainerType>
void my_function(ContainerType const& container)
{
cout << "my_function called: " << container.name << std::endl;
}
int main(int argc, char* argv[])
{
Container1 cont1;
Container2 cont2;
my_function(cont1);
my_function(cont2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6ZW5kbDsKY2xhc3MgQ29udGFpbmVyMQp7CiAgICBwdWJsaWM6CiAgICAgICAgQ29udGFpbmVyMSgpIDpuYW1lICgiQ29udDEiKQogICAge307CiAgICAgICAgc3RyaW5nIG5hbWU7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gaGVyZQp9OwoKY2xhc3MgQ29udGFpbmVyMgp7CiAgICBwdWJsaWM6CiAgICAgICAgQ29udGFpbmVyMigpIDpuYW1lICgiQ29udDIiKSB7fTsKICAgICAgICBzdHJpbmcgbmFtZTsKICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBoZXJlCn07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4Kdm9pZCBteV9mdW5jdGlvbihDb250YWluZXJUeXBlIGNvbnN0JiBjb250YWluZXIpCnsKCiAgICBjb3V0IDw8ICJteV9mdW5jdGlvbiBjYWxsZWQ6ICIgPDwgY29udGFpbmVyLm5hbWUgPDwgc3RkOjplbmRsOwp9CmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKICAgIENvbnRhaW5lcjEgY29udDE7CiAgICBDb250YWluZXIyIGNvbnQyOwogICAgbXlfZnVuY3Rpb24oY29udDEpOwogICAgbXlfZnVuY3Rpb24oY29udDIpOwoKICAgIHJldHVybiAwOwp9Cg==