#include <iostream>
#include <string>
using namespace std;
template<class T>
class SingleParamClass
{
public:
virtual void func(T arg) = 0;
};
template<class... TYPE_LIST>
class MultiParamClass : public SingleParamClass<TYPE_LIST>...
{
};
class MyMultiParamClass : public MultiParamClass<int, double, string>
{
public:
void func(int arg) override { cout << "int: " << arg << endl; }
void func(double arg) override { cout << "dbl: " << arg << endl; }
void func(string arg) override { cout << "str: " << arg << endl; }
};
int main()
{
MyMultiParamClass cls;
cls.func(1);
cls.func(1.0);
cls.func("1");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgU2luZ2xlUGFyYW1DbGFzcwp7CnB1YmxpYzoKCXZpcnR1YWwgdm9pZCBmdW5jKFQgYXJnKSA9IDA7Cn07Cgp0ZW1wbGF0ZTxjbGFzcy4uLiBUWVBFX0xJU1Q+CmNsYXNzIE11bHRpUGFyYW1DbGFzcyA6IHB1YmxpYyBTaW5nbGVQYXJhbUNsYXNzPFRZUEVfTElTVD4uLi4Kewp9OwoKY2xhc3MgTXlNdWx0aVBhcmFtQ2xhc3MgOiBwdWJsaWMgTXVsdGlQYXJhbUNsYXNzPGludCwgZG91YmxlLCBzdHJpbmc+CnsKcHVibGljOgoJdm9pZCBmdW5jKGludCBhcmcpIG92ZXJyaWRlIHsgY291dCA8PCAiaW50OiAiIDw8IGFyZyA8PCBlbmRsOyB9Cgl2b2lkIGZ1bmMoZG91YmxlIGFyZykgb3ZlcnJpZGUgeyBjb3V0IDw8ICJkYmw6ICIgPDwgYXJnIDw8IGVuZGw7IH0KCXZvaWQgZnVuYyhzdHJpbmcgYXJnKSBvdmVycmlkZSB7IGNvdXQgPDwgInN0cjogIiA8PCBhcmcgPDwgZW5kbDsgfQp9OwoKaW50IG1haW4oKQp7CglNeU11bHRpUGFyYW1DbGFzcyBjbHM7CgljbHMuZnVuYygxKTsKCWNscy5mdW5jKDEuMCk7CgljbHMuZnVuYygiMSIpOwoJcmV0dXJuIDA7Cn0=