Last active
November 27, 2018 22:17
-
-
Save bambuchaAdm/58a0e2d77b726a16bf7e9f6ec7506f6b to your computer and use it in GitHub Desktop.
with creation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
#include <string> | |
#include <tuple> | |
template <class T, class... Args> | |
class Deserializer { | |
}; | |
template <> | |
class Deserializer<std::string> { | |
public: | |
std::string deserialize() { | |
return "Lukasz"; | |
} | |
}; | |
template <> | |
class Deserializer<int> { | |
public: | |
int deserialize(){ | |
return 10; | |
} | |
}; | |
template <class T, class D> | |
class Deserializer<T, D> { | |
public: | |
Deserializer(Deserializer<D> d): deserializer(d) { | |
} | |
Deserializer<D> deserializer; | |
D deserialize() { | |
return deserializer.deserialize(); | |
} | |
}; | |
template <class T, class D1, class... Args> | |
class Deserializer<T, D1, Args...> : Deserializer<T, Args...> { | |
public: | |
Deserializer(Deserializer<D1> d, Deserializer<Args...> arg): Deserializer<T, Args...>(arg), deserializer(d) { | |
} | |
Deserializer<D1> deserializer; | |
std::tuple<D1, Args...> deserializeT() { | |
return make_tuple(deserializer.deserialize(), Deserializer<T, Args...>::deserialize()); | |
} | |
T deserialize(){ | |
return std::make_from_tuple<T>(deserializeT()); | |
} | |
}; | |
class Person{ | |
std::string name; | |
int age; | |
public: | |
explicit Person(std::string name, int age): name(name), age(age){ | |
// EMPTY | |
} | |
std::string& getName(){ | |
return this->name; | |
} | |
int getAge(){ | |
return this->age; | |
} | |
}; | |
auto personDeserializer = Deserializer<Person, std::string, int>(Deserializer<std::string>(), Deserializer<int>(), Deserializer<int>()); | |
std::string json = "{ \"name\" : \"Lukasz\", \"age\" : 26 }"; | |
int main(){ | |
// Person me("Lukasz", 26); | |
Person me = personDeserializer.deserialize(); | |
printf("%s %d\n", me.getName().c_str(), me.getAge()); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment