ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/dclient/include/adt/member_cmp.h
Revision: 1.1
Committed: Sun Oct 17 08:14:45 2010 UTC (13 years, 9 months ago) by sf-pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
initial import

File Contents

# Content
1 #pragma once
2
3 template<typename C, typename T, T (C::*Member)>
4 struct class_member
5 {
6 typedef C object_type;
7 typedef T member_type;
8
9 static member_type const &get (object_type const &v)
10 {
11 return v.*Member;
12 }
13 };
14
15 template<typename C>
16 bool
17 member_cmp (C const &a, C const &b)
18 {
19 return false;
20 }
21
22 template<typename Member, typename... Members>
23 bool
24 member_cmp (typename Member::object_type const &a,
25 typename Member::object_type const &b)
26 {
27 return Member::get (a) != Member::get (b)
28 ? Member::get (a) < Member::get (b)
29 : member_cmp<Members...> (a, b)
30 ;
31 }
32
33 #define MEMBER(class, member) class_member<class, decltype (class::member), &class::member>