44 lines
1.2 KiB
C++
44 lines
1.2 KiB
C++
// generics/Mixins.cpp
|
|
// (c)2016 MindView LLC: see Copyright.txt
|
|
// We make no guarantees that this code is fit for any purpose.
|
|
// Visit http://mindviewinc.com/Books/OnJava/ for more book information.
|
|
#include <string>
|
|
#include <ctime>
|
|
#include <iostream>
|
|
using namespace std;
|
|
|
|
template<class T> class TimeStamped : public T {
|
|
long timeStamp;
|
|
public:
|
|
TimeStamped() { timeStamp = time(0); }
|
|
long getStamp() { return timeStamp; }
|
|
};
|
|
|
|
template<class T> class SerialNumbered : public T {
|
|
long serialNumber;
|
|
static long counter;
|
|
public:
|
|
SerialNumbered() { serialNumber = counter++; }
|
|
long getSerialNumber() { return serialNumber; }
|
|
};
|
|
|
|
// Define and initialize the static storage:
|
|
template<class T> long SerialNumbered<T>::counter = 1;
|
|
|
|
class Basic {
|
|
string value;
|
|
public:
|
|
void set(string val) { value = val; }
|
|
string get() { return value; }
|
|
};
|
|
|
|
int main() {
|
|
TimeStamped<SerialNumbered<Basic>> mixin1, mixin2;
|
|
mixin1.set("test string 1");
|
|
mixin2.set("test string 2");
|
|
cout << mixin1.get() << " " << mixin1.getStamp() <<
|
|
" " << mixin1.getSerialNumber() << endl;
|
|
cout << mixin2.get() << " " << mixin2.getStamp() <<
|
|
" " << mixin2.getSerialNumber() << endl;
|
|
}
|