Last active
May 14, 2020 11:03
-
-
Save ahojukka5/b6bf024b0132d2ae5f060944590648d1 to your computer and use it in GitHub Desktop.
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 <iostream> | |
// https://stackoverflow.com/questions/23979785/can-unnamed-structures-inherit | |
class Data1 { | |
private: | |
int data = 5; | |
public: | |
int get_data() { | |
return data; | |
} | |
void set_data(int data) { | |
this->data = data; | |
} | |
}; | |
class Data2 { | |
private: | |
int data = 10; | |
public: | |
int getData() { | |
return data; | |
} | |
void setData(int data) { | |
this->data = data; | |
} | |
}; | |
template <typename T> class AbstractDataManipulator { | |
private: | |
virtual int get_data(T &data) = 0; | |
virtual void set_data(T &data, int new_data) = 0; | |
public: | |
void manipulate(T &data) { | |
int old_data = get_data(data); | |
std::cout << "Data: " << old_data << std::endl; | |
set_data(data, old_data + 1); | |
} | |
}; | |
class DataManipulator : public AbstractDataManipulator<Data1> { | |
private: | |
int get_data(Data1 &data) { | |
return data.get_data(); | |
} | |
void set_data(Data1 &data, int new_data) { | |
data.set_data(new_data); | |
} | |
}; | |
int main(int argc, char *argv[]) { | |
Data1 D1; | |
DataManipulator DM1; | |
DM1.manipulate(D1); | |
DM1.manipulate(D1); | |
Data2 D2; | |
static class : public AbstractDataManipulator<Data2> { | |
private: | |
int get_data(Data2 &data) { | |
return data.getData(); | |
} | |
void set_data(Data2 &data, int new_data) { | |
data.setData(new_data); | |
} | |
} DM2; | |
DM2.manipulate(D2); | |
DM2.manipulate(D2); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment