Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <map>
- #include <memory>
- #include <iostream>
- struct Parameter{};
- template<typename T>
- struct TypedParameter : public Parameter
- {
- public:
- TypedParameter (const T& data): data(data){};
- T data;
- };
- struct ParameterList
- {
- std::map<std::wstring, std::shared_ptr<Parameter>> list;
- //ParameterList(){}
- ParameterList(const ParameterList& other):list(other.list){}
- template<typename... Values>
- ParameterList(std::pair<std::wstring, Values> const &... keyvalues)
- {
- addPair<Values>(keyvalues...);
- }
- 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> void addPair(std::pair<std::wstring, T> param)
- {
- addParameter<T>(param.first, param.second);
- }
- template<class T> T& getParameter(const std::wstring& name) const
- {
- return static_cast<TypedParameter<T>*>(list.at(name).get())->data;
- }
- };
- class Test
- {
- private:
- ParameterList _param;
- protected:
- public:
- Test(ParameterList p): _param(p){}
- 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 t1(
- std::make_pair(L"name", L"Vorel"),
- std::make_pair(L"age", 19870),
- std::make_pair(L"job", L"dragon"));
- t1.Present();
- getchar();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement