Skip to content

Instantly share code, notes, and snippets.

@bambuchaAdm
Last active November 27, 2018 22:17
Show Gist options
  • Save bambuchaAdm/58a0e2d77b726a16bf7e9f6ec7506f6b to your computer and use it in GitHub Desktop.
Save bambuchaAdm/58a0e2d77b726a16bf7e9f6ec7506f6b to your computer and use it in GitHub Desktop.
with creation
#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