Skip to content

Commit 4226b02

Browse files
committed
more macro work
1 parent ae6aafa commit 4226b02

File tree

2 files changed

+13
-16
lines changed

2 files changed

+13
-16
lines changed

docs.in/reference/method_container.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ the same namespace as the container itself.
4242
#include <yorel/yomm2.hpp>
4343
#include <yorel/yomm2/compiler.hpp>
4444

45-
method_container(kicks);
45+
template<typename> struct kicks;
4646

4747
class Animal {
4848
std::string name;
@@ -53,7 +53,7 @@ class Animal {
5353
virtual ~Animal() {
5454
}
5555

56-
friend_method(kicks);
56+
template<typename> friend struct kicks;
5757
};
5858

5959
class Dog : public Animal {
@@ -72,8 +72,8 @@ define_method_inline(kicks, kick, (Dog * dog), std::string) {
7272
return dog->name + " barks";
7373
}
7474

75-
define_method(kicks, kick, (Bulldog * dog), std::string) {
76-
return method_definition(kicks, kick, (Dog*))(dog) + " and bites";
75+
define_method_in(kicks, kick, (Bulldog * dog), std::string) {
76+
return kicks<std::string (Dog*)>::fn(dog) + " and bites";
7777
}
7878

7979
BOOST_AUTO_TEST_CASE(ref_example) {

include/yorel/yomm2/macros.hpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,11 @@
9999
boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> \
100100
NS::_yOMM2_spec::yOMM2_body ARGS
101101

102-
#define YOMM2_DECLARE_METHOD_CONTAINER_4_NS(NS, CONTAINER, NAME, ARGS, ...) \
102+
#define YOMM2_DEFINE_INLINE(CONTAINER, NAME, ARGS, ...) \
103+
yOMM2_DEFINE_IN_CONTAINER( \
104+
YOMM2_GENSYM, inline, CONTAINER, NAME, ARGS, __VA_ARGS__)
105+
106+
#define yOMM2_DEFINE_IN_CONTAINER(NS, INLINE, CONTAINER, NAME, ARGS, ...) \
103107
template<typename> \
104108
struct CONTAINER; \
105109
namespace { \
@@ -113,24 +117,17 @@
113117
static NS::_yOMM2_method::next_type next; \
114118
static boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> fn \
115119
ARGS; \
116-
}
117-
118-
#define YOMM2_DEFINE_INLINE(CONTAINER, NAME, ARGS, ...) \
119-
yOMM2_DEFINE_IN_CONTAINER( \
120-
YOMM2_GENSYM, inline, CONTAINER, NAME, ARGS, __VA_ARGS__)
121-
122-
#define yOMM2_DEFINE_IN_CONTAINER(NS, INLINE, CONTAINER, NAME, ARGS, ...) \
123-
YOMM2_DECLARE_METHOD_CONTAINER_4_NS( \
124-
NS, CONTAINER, NAME, ARGS, __VA_ARGS__); \
120+
}; \
125121
INLINE NS::_yOMM2_method::next_type CONTAINER< \
126122
boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>>(ARGS)>::next; \
127123
namespace { \
128124
namespace NS { \
129125
INLINE _yOMM2_method::override_fn<CONTAINER< \
130126
boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> ARGS>::fn> \
131127
YOMM2_GENSYM( \
132-
&CONTAINER<boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> \
133-
ARGS>::next); \
128+
&CONTAINER< \
129+
boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> \
130+
ARGS>::next); \
134131
} \
135132
} \
136133
INLINE boost::mp11::mp_first<boost::mp11::mp_list<__VA_ARGS__>> \

0 commit comments

Comments
 (0)