Skip to content

Instantly share code, notes, and snippets.

@ahojukka5
Last active May 14, 2020 11:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ahojukka5/b6bf024b0132d2ae5f060944590648d1 to your computer and use it in GitHub Desktop.
Save ahojukka5/b6bf024b0132d2ae5f060944590648d1 to your computer and use it in GitHub Desktop.
#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