1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | #include <string> #include <map> #include <memory> #include <vector> #include <iostream> struct Parameter { }; template<typename T> struct TypedParameter : public Parameter { TypedParameter (const T& data): data(data){}; T data; }; struct ParameterList { template <class... NamedParams> ParameterList(NamedParams... namedParams) { buildList(namedParams...); } std::map<std::wstring, std::shared_ptr<Parameter>> list; template<class T> void addParameter(const std::wstring& name, const T& param) { list[name] = std::shared_ptr<Parameter>(new TypedParameter<T>(param)); } template<class T> T& getParameter(const std::wstring& name) const { return static_cast<TypedParameter<T>*>(list.at(name).get())->data; } private: template <class... NamedParams> void buildList() {} template <class Name, class Value, class... NamedParams> void buildList(Name&& name, Value&& value, NamedParams... restParams) { addParameter(name, value); buildList(restParams...); } template<class Single, class... Rest> void buildList(const Single&, Rest... rest); }; class Test { private: const ParameterList _param; protected: public: Test(ParameterList p): _param(p) { } Test(const std::wstring& name, int age) : _param(L"name", name, L"age", age) { } void Present() { std::wcout << L"My name is " << _param.getParameter<std::wstring>(L"name"); std::wcout << L" and I'm " << _param.getParameter<int>(L"age") << L" years old." << std::endl; } }; int main() { Test test(L"Piotr", 42); test.Present(); } |
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFBhcmFtZXRlcgp7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgVHlwZWRQYXJhbWV0ZXIgOiBwdWJsaWMgUGFyYW1ldGVyCnsKICAgIFR5cGVkUGFyYW1ldGVyIChjb25zdCBUJiBkYXRhKTogZGF0YShkYXRhKXt9OwogICAgVCBkYXRhOwp9OwoKc3RydWN0IFBhcmFtZXRlckxpc3QKewogICAgdGVtcGxhdGUgPGNsYXNzLi4uIE5hbWVkUGFyYW1zPgogICAgUGFyYW1ldGVyTGlzdChOYW1lZFBhcmFtcy4uLiBuYW1lZFBhcmFtcykKICAgIHsKICAgICAgICBidWlsZExpc3QobmFtZWRQYXJhbXMuLi4pOwogICAgfQogICAgCiAgICBzdGQ6Om1hcDxzdGQ6OndzdHJpbmcsIHN0ZDo6c2hhcmVkX3B0cjxQYXJhbWV0ZXI+PiBsaXN0OwoKICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgYWRkUGFyYW1ldGVyKGNvbnN0IHN0ZDo6d3N0cmluZyYgbmFtZSwgY29uc3QgVCYgcGFyYW0pCiAgICB7CiAgICAgICAgbGlzdFtuYW1lXSA9IHN0ZDo6c2hhcmVkX3B0cjxQYXJhbWV0ZXI+KG5ldyBUeXBlZFBhcmFtZXRlcjxUPihwYXJhbSkpOwogICAgfQoKICAgIHRlbXBsYXRlPGNsYXNzIFQ+IFQmIGdldFBhcmFtZXRlcihjb25zdCBzdGQ6OndzdHJpbmcmIG5hbWUpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVkUGFyYW1ldGVyPFQ+Kj4obGlzdC5hdChuYW1lKS5nZXQoKSktPmRhdGE7CiAgICB9CnByaXZhdGU6CiAgICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gTmFtZWRQYXJhbXM+CiAgICB2b2lkIGJ1aWxkTGlzdCgpIHt9CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgTmFtZSwgY2xhc3MgVmFsdWUsIGNsYXNzLi4uIE5hbWVkUGFyYW1zPgogICAgdm9pZCBidWlsZExpc3QoTmFtZSYmIG5hbWUsIFZhbHVlJiYgdmFsdWUsIE5hbWVkUGFyYW1zLi4uIHJlc3RQYXJhbXMpCiAgICB7CiAgICAgICAgYWRkUGFyYW1ldGVyKG5hbWUsIHZhbHVlKTsKICAgICAgICBidWlsZExpc3QocmVzdFBhcmFtcy4uLik7CiAgICB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBTaW5nbGUsIGNsYXNzLi4uIFJlc3Q+CiAgICB2b2lkIGJ1aWxkTGlzdChjb25zdCBTaW5nbGUmLCBSZXN0Li4uIHJlc3QpOwp9OwoKY2xhc3MgVGVzdAp7CnByaXZhdGU6CiAgICBjb25zdCBQYXJhbWV0ZXJMaXN0IF9wYXJhbTsKcHJvdGVjdGVkOgpwdWJsaWM6CiAgICBUZXN0KFBhcmFtZXRlckxpc3QgcCk6CiAgICAgICAgX3BhcmFtKHApCiAgICB7CiAgICB9CgogICAgVGVzdChjb25zdCBzdGQ6OndzdHJpbmcmIG5hbWUsIGludCBhZ2UpIDogX3BhcmFtKEwibmFtZSIsIG5hbWUsIEwiYWdlIiwgYWdlKQogICAgewogICAgfQoKICAgIHZvaWQgUHJlc2VudCgpCiAgICB7CiAgICAgICAgc3RkOjp3Y291dCA8PCBMIk15IG5hbWUgaXMgIiA8PCBfcGFyYW0uZ2V0UGFyYW1ldGVyPHN0ZDo6d3N0cmluZz4oTCJuYW1lIik7CiAgICAgICAgc3RkOjp3Y291dCA8PCBMIiBhbmQgSSdtICIgPDwgX3BhcmFtLmdldFBhcmFtZXRlcjxpbnQ+KEwiYWdlIikgPDwgTCIgeWVhcnMgb2xkLiIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBUZXN0IHRlc3QoTCJQaW90ciIsIDQyKTsKICAgIHRlc3QuUHJlc2VudCgpOwp9
-
upload with new input
-
result: Success time: 0s memory: 3040 kB returned value: 0
My name is Piotr and I'm 42 years old.


