1 |
#include <gig.h> |
2 |
|
3 |
template<typename T> |
4 |
class Param { |
5 |
protected: |
6 |
gig::DimensionRegion* object; |
7 |
public: |
8 |
virtual T& access() = 0; |
9 |
}; |
10 |
|
11 |
template<typename T> |
12 |
class Param1 : public Param<T> { |
13 |
using Param<T>::object; |
14 |
T gig::DimensionRegion::* param; |
15 |
public: |
16 |
Param1(T gig::DimensionRegion::* param) : param(param) { } |
17 |
T& access(); |
18 |
}; |
19 |
|
20 |
template<typename T> |
21 |
T& Param1<T>::access() { |
22 |
printf("ojsan"); |
23 |
return object->*param; |
24 |
} |
25 |
|
26 |
class ParamUnityNote : public Param<uint8_t> { |
27 |
public: |
28 |
uint8_t& access() { |
29 |
printf("hejsan\n"); |
30 |
return object->UnityNote; } |
31 |
}; |
32 |
|
33 |
|
34 |
int main() { |
35 |
ParamUnityNote p1; |
36 |
Param1<uint8_t> p2(&gig::DimensionRegion::ChannelOffset); |
37 |
Param<uint8_t>& pp = p1; |
38 |
printf("%d\n", pp.access()); |
39 |
} |